2013-06-19 41 views
0

如果我有一個AsyncTask無限期地運行,並且Android決定需要終止該任務,或者釋放內存或者因爲設備正在進入睡眠模式(用戶按下電源按鈕),那麼是否AsyncTask中的某種方式可以從操作系統獲得即將被殺死的通知,以便採取行動來完成任何未完成的任務?當Android殺死一個AsyncTask時檢測

+0

這不能回答我的問題。我的問題不是關於行動的時間長短。這是關於檢測線程的殺死。 – AndroidDev

+0

你無法檢測到線程被殺死,也許這個回調會有幫助:'''Application.onLowMemory()''' –

+0

如何使用AsyncClass.isCancelled() - 如果這個任務在正常完成之前被取消,則返回true OR AsyncClass.cancel(boolean) - 嘗試取消執行此任務? – AndiM

回答

1

爲了給你一個簡單的答案:

只要一個的AsyncTask生活的過程中它是聯繫在一起的生活。如果它的進程仍在運行(即使在後臺運行),OS永遠不會終止AsyncTask。

另請注意,AsyncTask獨立於啓動它的Activity運行。該活動可能會被銷燬,AsyncTask依然存在,直到該進程被銷燬。

編輯 您需要調用doInBackground()方法內的isCancelled()以確保操作系統銷燬AsyncTask時,doInBackground完成,以便執行onCancelled()方法。

所以總結一下:在doInBackground方法中總是檢查isCancelled布爾函數。如果它返回true,則從doInBackground返回。自動執行onCancelled函數,而不是onPostExecute。在那裏,你可以放置你想要執行的代碼,在它死之前。

+1

我不相信那是真的。操作系統肯定會殺死任何它認爲必要的東西,即使是在惡劣條件下的前臺服務。如果操作系統能夠殺死前臺服務,那麼對於銷燬AsyncTask肯定不會再三思。 – AndroidDev

+0

在「惡劣條件下」它會殺死整個過程。它不能單獨殺死AsyncTask。 –

+0

另外,您應該保留對AsyncTask的引用,並在需要知道它是否仍然存在時進行檢查。 –