2011-03-07 72 views
21

我想我知道這個問題的答案,但是一旦AsyncTask的調用活動一直在finish()版本上繼續存在?如果一個活動被殺死,AsyncTask是否繼續存在?

protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(), "Your data is processing.", Toast.LENGTH_LONG); 
     finish(); 
    } 

編輯:到目前爲止,兩個不同的答案:)

回答

13

的是的AsyncTask綁在UI線程,如果該活動是完成任務異步取消。

[更新] - 以下Hackbod的評論是正確的。應該指出的是,AsyncTasks是短命的,因此不用擔心這個問題。一個AsycTask只有在它完成時才真正消失,或者這個過程被殺死,在完成調用後可能會發生,也可能不會發生。

+0

我認爲你是對的(正如在文檔中所述):http://developer.android.com/reference/android/os/AsyncTask.html#Class_Overview – 2011-03-07 22:47:57

+41

這種措辭不太好。 AsyncTask完全獨立於Activity;你必須一起管理它們。正在完成的活動*不會對任何AsyncTasks執行任何操作,除非您正在從onDestroy()中清除它們。另一方面,如果一個活動的進程在後臺被殺害,那麼AsyncTask也會被終止,因爲整個進程的一部分會消失。 – hackbod 2011-03-08 05:03:13

+0

因此,我們需要在_onPostExecute()_內做出更改之前檢查活動是否仍然存在? – Reek 2017-01-27 12:38:58

1

它繼續工作,直到完成onPostExecute

1

我已經經歷了一些怪事與異步任務,其中如果活動是由OS死亡,當應用程序恢復時,AsyncTasks有時根本就不運行。我不確定他們爲什麼進入這個狀態。如果您在自己的執行程序線程中執行AsyncTasks,則不會發生。我可能會遇到一些奇怪的情況。認爲這可能是有用的發佈在這裏:)。

+0

我遇到同樣的問題。當我恢復asynkTask不起作用。如何解決這個 – dmSherazi 2013-12-19 08:35:24

+0

對不起,延遲迴復。正如我上面提到的,我的解決方案是使用執行程序並將AsyncTask傳遞給它。你正在尋找的方法是AsyncTask.executeOnExecutor() - 希望有幫助嗎? – dineth 2014-01-15 20:24:33

0

異步任務保持運行直到他onPostExecute()完成。

嘗試通過將一個烤麪包上光潔度()和onPostExecute()以查看哪個吐司首先顯示。

0

的AsyncTask不限定到活動或服務的任何生命週期方法。

它保持在一個單獨的線程,直到onPostExecute運行()獲取在主線程中執行。

0

異步任務不會影響Activity生命週期或任何配置更改。他們繼續運行,直到onPostExecute()方法被調用。

應該使用服務進行長時間運行操作。

相關問題