- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序使用 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/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!