0

我的Android應用程序使用AsyncTask從網站下載一些數據。Android後臺線程和活動關係?

但是,當我按下活動啓動後立即Android設備的後退按鈕,工作線程的onPostExecute方法被調用,這是奇怪的,因爲Android的所謂的onDestroy方法之前onPostExecute和onPostExecute方法上運行主要UIThread,我認爲不存在了。

任何人都可以幫助我我不明白嗎?

+1

AsyncTask的全部重點是在一個單獨的線程上運行一個進程,因此它將在主UI線程的onDestroy之後完成,因爲它不是同一個線程。如果你想在按回時殺死任務,你可以在onBackPressed()方法中調用yourTaskName.cancel()方法 – Neil

回答

2

AsyncTask基本上是在背景中作爲一個獨立的線程執行你想要的內容。所以當你退出UI時,這並不意味着你已經殺死了AsyncTask。它將繼續它的正常生命週期並以onPostExecute結束。如果您也想要殺掉AsyncTask,則必須爲AsyncTask調用cancel()函數。

雖然知道這一點,但實際上並不能殺死AsyncTask,這將由Android本身完成。因此,您必須等待一段時間,直到當前任務被終止(如果您致電cancel()),以便重新啓動此特定AsyncTask

您還應該閱讀onCancelled()方法。欲瞭解更多信息,請登錄documentation

如果我犯了什麼錯誤,請糾正我。

+0

ok。另一個問題。我的應用程序顯示主要活動的一些數據,並且asynctask正在下載它們。這裏是場景i不完全明白。雖然我的asynctask正在下載數據,我按Home按鈕調用onStop方法,並且活動不再可見。這意味着我的asynctask不能刷新活動的觀點? –

+1

就我看到的,在它仍然執行'doInBackground'的過程中,在UI中通過'asyncTask'更新的唯一部分是進度對話框。一旦你重新開始活動,它會被更新。在此之前,它並不實際更新對話框,而是存儲進度。所以,如果這個比例是4%,那麼你就會消失,它的處理量可以達到10%,而他們恢復活動會顯示10%。 –