1

我有一個綁定服務。例如,該服務有一個方法calculate(),它執行一些真正密集的計算,如果活動關閉(這就是爲什麼選擇服務,而不是asynctask)應該繼續執行。這個服務返回一些結果值,當它再次打開時,它應該顯示在活動上。 問題如下,如何在返回某些值的情況下優雅地避免綁定服務中的ANR錯誤?避開ANR在android綁定服務

+0

http://developer.android.com/training/articles/perf-anr.html –

+0

發佈您的代碼和錯誤日誌? –

回答

1

如果您使用Service這並不意味着您不需要線程(或AsyncTask)。你真的需要。

的提取物形成Service參考:

需要注意的是服務,如其他應用程序對象,在其宿主進程的主線程中運行。這意味着,如果你的服務要做任何CPU密集型(如MP3播放)或阻塞(如網絡)操作,它應該產生自己的線程來完成這項工作。

所以,我只是把AsyncTask放在Service裏面以避免ANR。

更新:

的AsyncTask能夠正確且容易使用的UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

可以使用更新你的主線程:

onProgressUpdate(進展...),以publishProgress(進展...)的調用後調用UI線程。執行的時間是未定義的。此方法用於在後臺計算仍在執行時在用戶界面中顯示任何形式的進度。例如,它可以用來爲進度條設置動畫效果或在文本字段中顯示日誌。

+0

謝謝。您對使用Callable和Future服務有何看法?它將允許返回值並在單獨的線程中執行。 – user1379574

+0

我從來沒有使用過這些,但我認爲在這種情況下你需要的只是AsyncTask類。看到我更新的答案更多。 – Kristopher

0

也可以使用Thread或asynctask來計算()您的服務。