我有一個活動,在該活動中,我使用asyctask的子類與服務器同步後端服務器。異步任務在App終止時停止(onDestroyed被調用)
鑑於這是一項網絡任務,可能需要幾秒鐘的時間。我擔心發生以下情況。
活動開始,每當asynctask開始運行時,它都會啓動。 onPrexecute()被調用,執行並結束。比doInBackground()被調用,並且這樣做,然而,只是當方法被執行時,用戶按下主頁按鈕並從最近的應用程序中滑動應用程序。 (這當然會導致應用程序終止,並且所有的onDestroy方法都會被調用活着的活動。(糾正我,如果我錯了這個))。
在我的onPostExecute()方法中,我將數據插入到數據庫並更新視圖。 但是由於應用程序'終止',onPostExecute()方法從不運行。
我的問題是:
- 當用戶按下home鍵,並得到了應用,並揮筆應用,是doInBackground停止在那一刻?也就是說,它在中間被切斷,不會繼續它的作用?
- 我將從服務器獲取並放入數據庫的數據會發生什麼?建議將數據放入doInBackground中的數據庫中嗎?
但不會IntentService(就像asynctask),只要應用程序被殺死,就停止,所以它不會甚至能夠發射廣播。 – tony9099
不,不會停止。 IntentService與調用活動完全分離,所以它將繼續運行,直到它完成任務,即使啓動它的應用程序被終止。這就是爲什麼它對於數據庫操作來說非常完美,因爲它仍然會將所有接收到的數據寫入數據庫。發送廣播只是爲了通知調用活動服務已完成,並且應該更新它的視圖 - 所以如果活動不再運行,則無論如何不重要。 – physphil
編號請參閱我答案中的鏈接。我已經測試過了。 – wtsang02