2011-01-28 73 views
43

我目前正在團隊中開發一些Android應用,在過去的幾個月裏我們使用了兩種不同的方法(一種是我個人喜好的,另一種是其他開發者喜歡的)。Android:AsyncTask建議:私人課還是公開課?

儘管到目前爲止的結果都是一樣的,這讓我想知道......我們應該:

  • 使用AsyncTasks作爲私有類使用它們的活動中。
  • 或使用AsyncTasks作爲接收活動

的情況下單獨公開課是否有任何由谷歌建議的技術途徑嗎?

您的經驗對此有何評論(優點,缺點,問題)?

回答

35

內部類可以很好地表示對象,這些對象意味着是私有的,或者與封閉類緊密聯繫。偶爾會有使用內部類的技術原因(例如,模擬閉包)。他們還減少了命名空間的污染。

內部類的一個缺點是,如果他們訪問封閉類的私有成員(字段或函數),編譯器將爲這些成員生成訪問函數。語言純粹主義者會爭論這種破壞封裝是好事還是壞事。訪問函數爲每個訪問添加了一些開銷(通常這不是一個因素,但是它存在)。另一個缺點是它使源文件更復雜,因此難以管理。 (我偶爾會在內部類中編輯一個函數,同時認爲它在外部類中,反之亦然)。最後,內部類往往不可重用,而單獨的類通常可以被參數化以具有多種用途。

這些優點和缺點都不在我的頭上。我相信別人會有更多的想法。

UPDATE:

在這個谷歌IO video內的AsyncTask選項被清楚地標明瞭錯誤的選項。

+1

經過一段時間使用它們作爲分離的公共類,我發現它更有用。 – neteinstein 2011-12-14 19:28:24

+14

@NeTeInStEiN - 對於AsyncTask,由於技術原因,內部類(與嵌套靜態類相比)始終是錯誤的:可以在不停止AsyncTask的情況下終止Activity(由於配置更改)。如果AsyncTask是一個內部類,則會泄漏舊的Activity,因爲AsyncTask將對外部類實例具有(隱藏)引用。手機的一些方向改變會導致進程因內存耗盡而死亡。 – 2012-01-27 18:41:14

7

沒關係,請使用對您的代碼最有意義的內容。重要的是要注意在活動被銷燬後持有活動引用的異步任務,或者隱式地作爲活動的內部類,或者通過給定活動/上下文對象來明確指定。