我有一個綁定服務。例如,該服務有一個方法calculate(),它執行一些真正密集的計算,如果活動關閉(這就是爲什麼選擇服務,而不是asynctask)應該繼續執行。這個服務返回一些結果值,當它再次打開時,它應該顯示在活動上。 問題如下,如何在返回某些值的情況下優雅地避免綁定服務中的ANR錯誤?避開ANR在android綁定服務
回答
如果您使用Service
這並不意味着您不需要線程(或AsyncTask)。你真的需要。
的提取物形成Service參考:
需要注意的是服務,如其他應用程序對象,在其宿主進程的主線程中運行。這意味着,如果你的服務要做任何CPU密集型(如MP3播放)或阻塞(如網絡)操作,它應該產生自己的線程來完成這項工作。
所以,我只是把AsyncTask
放在Service
裏面以避免ANR。
更新:
的AsyncTask能夠正確且容易使用的UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。
可以使用更新你的主線程:
onProgressUpdate(進展...),以publishProgress(進展...)的調用後調用UI線程。執行的時間是未定義的。此方法用於在後臺計算仍在執行時在用戶界面中顯示任何形式的進度。例如,它可以用來爲進度條設置動畫效果或在文本字段中顯示日誌。
謝謝。您對使用Callable和Future服務有何看法?它將允許返回值並在單獨的線程中執行。 – user1379574
我從來沒有使用過這些,但我認爲在這種情況下你需要的只是AsyncTask類。看到我更新的答案更多。 – Kristopher
也可以使用Thread或asynctask來計算()您的服務。
- 1. Android開始服務或綁定服務
- 2. 如何避免ANR在獨立的Android服務
- 3. 在Android中綁定未綁定服務
- 4. Android問題綁定開始服務
- 5. Android服務綁定
- 6. Android綁定服務
- 7. Android。使用HttpClient避免ANR
- 8. 如何避免在Android中發生ANR?
- 9. 終止Android服務後獲取ANR
- 10. 由ANR殺死的Android服務
- 11. 的Android綁定服務和AIDL服務
- 12. Android綁定服務與AsyncTask
- 13. Android綁定服務問題
- 14. Android服務綁定問題
- 15. Android - 綁定到服務
- 16. Android綁定到服務
- 17. Android無法綁定服務
- 18. 無法綁定服務Android()
- 19. Android服務尚未綁定
- 20. Android服務無法綁定
- 21. 綁定服務的Android
- 22. Android綁定服務問題
- 23. 混淆服務綁定和解綁Android
- 24. Android結算服務 - 在哪裏綁定?
- 25. 在Android中綁定服務的問題
- 26. 在Android中綁定到服務
- 27. 如何在Android中綁定此服務?
- 28. ANR執行服務com.onesignal.SyncService
- 29. 安卓服務導致ANR
- 30. Android服務:按需綁定與綁定在#onCreate()
http://developer.android.com/training/articles/perf-anr.html –
發佈您的代碼和錯誤日誌? –