我們是否應該從onHandleIntent()
方法IntentService
開始異步任務?我讀在worker thread
運行,所以從那裏開始asyncTask
可以安全嗎?從onhandleintent啓動異步任務
回答
IntentService
s已經是後臺進程;沒有必要從那裏啓動一個AsyncTask。 另外,從任何地方開始它是幫助你多線程的輔助類。如果您在活動中使用它,請確保您不要在您的AsyncTask的AsyncTask
是'安全'的;doInBackground()
-method中操縱View
。
如果你需要生成你的IntentService內多個線程,只需使用:
新的Thread(Runnable的R)。開始();
看到How to run a Runnable thread in Android?
一個例子,如果你需要調用某種回調,使用Handler。有關示例,請參閱http://www.vogella.com/articles/AndroidPerformance/article.html#handler
AsyncTask類用於提供一種機制來實現多線程,因此您的事件線程不會被絞死,但是在您使用服務時,您不應該使用服務中的AsyncTask,而是您可以使用線程,如果某些長時間運行的任務要執行,則在Service中。
如果您確實需要在IntentService中使用AsyncTask,則可以在AsyncTask中創建一個方法,該方法調用de doInBackGround和onPostExecute。事情是這樣的:
void executeFlowOnBackground(Params params) {
onPostExecute(doInBackground(params));
}
在我來說,我這樣做是因爲所有App請求中通過擴展的AsyncTask類製成,並且由於執行的是難度重構代碼。
我糾正了錯字。請確保不要在下次發生這樣的錯字... –
- 1. 異步任務服務未啓動
- 2. 通過Spring啓動異步任務TaskScheduler
- 3. 異步任務從api的異步任務不運行異步
- 4. 從服務和異步任務啓動PopupWindow
- 5. 試圖從一個異步任務啓動一個片段
- 6. 異步任務
- 7. 異步任務
- 8. 異步任務
- 9. 異步任務vs任務
- 10. 切換異步任務同步任務
- 11. 同步異步任務
- 12. android異步任務
- 13. 異步任務angularjs
- 14. SignalR異步任務
- 15. 異步任務,BufferedReader
- 16. PHP異步任務
- 17. 與異步任務
- 18. 塊異步任務
- 19. 異步任務異常Android
- 20. 最好的方式來並行啓動幾個異步任務?
- 21. 春季啓動時在數據庫中執行任務異步
- 22. C#啓動任務運行異步方法
- 23. 在Android上啓動多個異步任務
- 24. Android:取消異步任務並重新啓動
- 25. 每次啓動時的Android異步任務
- 26. 嘗試啓動兩個異步任務的問題。
- 27. EJB 3.1:啓動無狀態bean中的異步任務
- 28. 其他方式以異步方式啓動任務
- 29. 在Outlook啓動時運行異步任務
- 30. Android:在OnReceive方法中啓動異步任務
開始一個'AsyncTask'從任何地方都不安全:http://stackoverflow.com/questions/4187960/asynctask-and-looper-prepare-error - 它只打算從主線程啓動,可能工作如果你在'onHandleIntent'裏面啓動它,因爲它有一個Looper – zapl
如果我在onHandleIntent()裏面不使用asyncTask?它裏面的代碼仍然會在後臺運行? – Rookie
@zapl,感謝您的評論。 Raghav:只需調用你想要調用的方法;因爲IntentService在不同的線程中運行,所以您的UI不會凍結。如果出於任何原因想要在IntentService中產生多個線程,只需使用新線程(Runnable r).start();看例子在http://stackoverflow.com/questions/1921514/how-to-run-a-runnable-thread-in-android – Reinier