2012-02-26 67 views
2

我在幾個地方使用AsyncTasks來執行冗長的數據庫查詢,然後在PostExecute中填充生成的數據視圖。但到了那個時候,用戶可以在我的應用程序中切換屏幕(片段),甚至將應用程序「退出」回發射器。Android:活動結束時AsyncTask的最佳實踐

現在我使用一種有點kludgey的方法,以便AsyncTask可以在進行更新之前檢查活動是否仍然存在。但這真的有必要嗎?看起來只要任務處於活動狀態,即各種View對象仍然存在,因此更新它們雖然無用,但不會損害任何內容。

任何人都有一些協調AsyncTasks在這方面的行動的想法?

回答

2

保持對已結束活動的引用可能會導致嚴重的內存問題,因爲它會阻止與該活動關聯的所有內容都被刷新。這個問題上Android開發者小組有一個有趣的線索;我認爲最有用的帖子是here

另請參閱this thread瞭解更多關於AsyncTask中的缺陷以及如何處理它們的信息。

編輯:還有Santiago Lezica的this useful blog post這是特定於使用AsyncTask與片段,稱爲setRetainInstance(true);

+0

這幾乎總結一下我已經運行到並斷定關於使用AsyncTasks的陷阱。謝謝你的提示! – gordonwd 2012-02-28 15:55:50

0

由於您的後臺任務幾乎侷限於數據庫查詢,因此我可能會建議使用CursorLoader而不是原始AsyncTask來查詢您的數據。如果你的目標不是3.0,你仍然可以通過兼容性庫來使用它們。它們只是爲了這個目的而設計的;允許系統管理後臺任務和Cursor

Loader協議通過LoaderManager,這勢必給Activity和處理是否要解僱回調通信,因此您不必擔心註銷,如果用戶的最新刷新前葉完成它的不管。

要閱讀有關實現Loader的更多信息,請閱讀相關的開發人員指南: http://developer.android.com/guide/topics/fundamentals/loaders.html

HTH

+0

裝載機是一個有趣的想法,我不知道他們,因爲我最初編寫這個應用程序時,V2.2是最新的。但我實際上做的不僅僅是後臺查詢,我不確定是否可以實現這種方法。但我會研究它。 – gordonwd 2012-02-28 15:54:21

+0

它非常具有可擴展性,您可以使用自己的'CursorLoader' – Devunwired 2012-02-28 19:43:17