0

誰能解釋一下不正是發生(的Asynctask生命週期),舉例來說,如果我有和ActivityFragment從這個Fragment我執行Asynctask其中在onPreExecute我開始顯示ProgressDialog,並在一些點我關閉應用程序,而Asynctask仍在運行?的AsyncTask生命週期的一個片段內

據我已檢查Fragment不叫onDetach也不onDestroyAsynctask沒有達到onPostExecute方法或onCancelled

+0

讓我知道你的問題很明顯。你需要知道..生命週期如何片段是否行得通呢?或Asynctask? –

+0

你可以發佈你的Asynctask代碼,以及你的執行方式 –

回答

1

你有沒有在你的片段設置setRetainInstance(真),每次啓動與setRetainInstance作爲真正的任務片段裏面的AsyncTask將繼續在不中斷背景,是不是在一個活動

2

的情況下,如果我沒看錯你所熟悉的的AsyncTask的生命週期運行。如果沒有,請

https://developer.android.com/reference/android/os/AsyncTask.html

要回答爲什麼onPostExecute方法不叫當我們退出該應用程序,而進度條仍然在運行,我會說這是因爲,在持有該活動/上下文的引用這將在時間進度條被破壞決定它的任務是完成(BG任務/線程)。如何由Alex洛克伍德處理的AT WRT片段和活動

非常有用的博客。

http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html

0

請確保AsyncTask.doInBackground()已經完成。或者說,更重要的是可能的,你的主線程被卡住的地方作爲AsyncTask.onPostExecute()必須在主線程中執行。

0

在你所說的場景中,將調用片段方法「onPause()」和「onStop()」(除了包含給定片段的Activity之外)。

由於這些方法被調用,你應該根據你想在的AsyncTask做什麼反應。

如果不是這種情況,請參考#stack_ved給出的鏈接。

無論如何,如果你想要做的任何種類的負載的片段裏,我強烈建議您使用「裝載機」或「AsyncTaskLoader」。

https://developer.android.com/reference/android/content/AsyncTaskLoader.html

+0

所以現在我的疑問是,爲什麼它似乎是由於進度對話框導致的內存泄漏,例如,我在一個片段或活動中顯示一個ProgressDialog,並且我不排除它,但似乎並沒有發生,如果我有一個片段AsynctTask在其中關閉onPostExecute方法的對話框並顯然永遠不會被調用,因爲我在AT完成之前關閉應用程序。 –

+0

問題是AsyncTask沒有與Android生命週期鏈接(所以你將不得不爲AsncTask管理Activity和Fragment中發生的所有事件)。這就是爲什麼我建議你使用裝載機。 – zapotec