gpt4 book ai didi

android - 有必要退出一个 HandlerThread 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:30 31 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我个人的偏好是在需要时创建一个新线程,并在完成后清理它。这样我就不会遇到多个组件同时尝试使用同一个线程的问题,并且我保持了“干净的船”。 Android 也有不错的 AsyncTask这对您来说很容易。

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

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

关于android - 有必要退出一个 HandlerThread 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542909/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com