有必要退出HandlerThread吗?

时间:2011-07-01 02:02:16

标签: android multithreading handler

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我个人的偏好是在需要时创建一个新线程,并在完成后进行清理。这样我试图同时使用同一个线程的多个组件没有任何问题,我保持“干净的船”。 Android也有很好的AsyncTask,这让你很容易。

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

BTW,或者您也可以考虑使用ThreadPoolExecutor