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

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

最初,这似乎对我来说是一个很大的拒绝-我绝对不想做的事情-但我现在不确定。当Android杀死我的进程时,就像它需要释放CPU时间或内存时一样,它将终止该线程以及UI线程。此外,线程将处于等待状态,因此不会消耗任何CPU时间。除此之外,我的应用程序还利用了许多AsyncTasks,我知道它们利用了线程池。据我了解,AsyncTask利用ThreadPoolExecutor,它不遵守任何应用程序生命周期回调(不使用池中的线程时,请等待)。

因此,我的问题是,我可以在多个应用程序组件之间使用HandlerThread,而不(或很少)退出它,并且在不使用它时等待它,而不会遭受严重的不良影响吗?

最佳答案

我个人的喜好是在需要时创建一个新线程,并在完成后对其进行清理。这样,我在尝试同时使用同一线程的多个组件上没有任何问题,并且保持了“干净的状态”。此外,Android还具有漂亮的AsyncTask,可让您轻松完成此操作。

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

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

10-08 15:20