有必要退出HandlerThread吗?

sky*_*ler 10 multithreading android handler

我的应用程序使用a HandlerThread为需要在后台线程上运行的组件共享的一些操作.大多数情况下,此线程将处于等待状态.

我可以HandlerThread在我的应用程序中保持运行(等待),在必要时向其发送消息,但从不通过它退出HandlerThread.getLooper().quit()吗?这可能意味着HandlerThread即使在我的所有应用程序组件都被销毁之后,它仍将继续存在于等待状态.

最初这对我来说似乎是一个很大的问题 - 我绝对不想做的事 - 但我现在不确定.当Android杀死我的进程时,就像它需要释放CPU时间或内存一样,它将结束这个线程和我的UI线程.此外,线程将等待,因此它不会占用任何CPU时间.除此之外,我的应用程序使用了很多AsyncTasks,我知道利用线程池.根据我的理解,AsyncTask利用ThreadPoolExecutor,它不遵循任何应用程序生命周期回调(池中的线程在不使用时,只是坐等).

所以我的问题是,我可以使用HandlerThread跨多个应用程序组件,从不(或很少)退出它,并在不使用时让它等待,而不会遭受可怕的不良影响吗?

THe*_*per 0

我个人的偏好是在需要时创建一个新线程,并在完成后清理它。这样,多个组件尝试同时使用同一线程就不会出现任何问题,并且我可以保持“干净的状态”。Android 还具有出色的AsyncTask,可以让您轻松完成此任务。

话虽这么说,我认为没有理由不能为多个组件重用处理程序线程,只要您规范对线程的访问并在活动被破坏时正确清理它。如果我正确理解这篇文章,即使您的所有活动都终止,您的线程也可能会继续运行,因为您的进程可能会继续运行。为了解决这个问题,您可以将线程设置为守护线程。当应用程序中的最后一个非守护线程完成时,守护线程将自动销毁。

顺便说一句,或者您也可能想考虑使用ThreadPoolExecutor