2011-07-01 37 views
7

我的應用程序使用HandlerThread作爲在需要在後臺線程上運行的組件間共享的一些操作。大多數時候這個線程將處於等待狀態。必須退出HandlerThread?

我可以在我的應用程序中運行(等待)這個HandlerThread,在必要時發送消息給它,但是不會通過HandlerThread.getLooper().quit()退出嗎?這可能意味着這個HandlerThread即使在我的所有應用程序組件都被銷燬之後仍然處於等待狀態。

最初,這對我來說似乎是一個很大的問題 - 我絕對不想這麼做 - 但我現在還不確定。當Android殺死我的進程時,就像它需要釋放CPU時間或內存時會執行的一樣,它會結束此線程以及我的UI線程。此外,線程將等待,所以它不會消​​耗任何CPU時間。除此之外,我的應用程序使用了許多AsyncTasks,我知道它使用線程池。根據我的理解,AsyncTask利用了ThreadPoolExecutor,它不遵守任何應用程序生命週期回調(池中的線程在不使用時,只是在等待)。

所以我的問題是,我可以在多個應用程序組件中使用HandlerThread,從不(或很少)退出它,並在不使用時等待,而不會遭受可怕的不良影響?

回答

1

我的個人偏好是創建一個新的線程,只要有需要時就清理乾淨。這樣我就不會有多個組件在嘗試同時使用同一個線程時遇到任何問題,並且我保持一個「乾淨的船」。 Android也有很好的AsyncTask,這對你來說很簡單。這就是說,我沒有看到爲什麼你不能重複使用多個組件的句柄,只要你管理對線程的訪問並在你的活動被破壞時正確清理它。如果我正確理解this post,即使所有活動都已終止,您的線程仍可繼續運行,因爲您的進程可能會繼續運行。爲了解決這個問題,你可以將你的線程設置爲一個守護線程。守護線程在應用程序中的最後一個非守護線程完成時自動銷燬。

BTW,或者你可能還需要考慮使用ThreadPoolExecutor

+0

我不同意你的意見,因爲如果你必須在另一個線程做一件事是很多次完成,將創造大量的線程,這可能會導致應用程序崩潰。 –

相關問題