java - 清理已停止的 Looper 的线程

标签 java android concurrency garbage-collection

我正在使用附加到 Android HandlerThread 的 Looper执行长时间运行的异步任务:

HandlerThread handlerThread = new HandlerThread("handler-thread");
handlerThread.start()
Handler myHandler = new Handler(callbacks, handlerThread.getLooper());
// Ready to handle messages in callbacks

当我完成工作线程后,我调用handlerThread.getLooper().quit()来停止它的Looper。假设该线程没有执行其他操作,HandlerThread 实例在其 Looper 被 quit() 后是否终止(退出、死亡)?

最佳答案

Does the HandlerThread instance terminate (exit, die) after its Looper is quit(), assuming that that thread is performing no other execution?

Looper退出后,如果run()中没有其他处理要执行,则工作线程的run()方法返回。此时,handlerThread.isAlive() 返回 false,handlerThread.getState() 返回 TERMINATED

请注意,多次启动线程是不合法的,如 Thread API doc 中所述。 .

关于java - 清理已停止的 Looper 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446976/

相关文章:

java - 基于父类(super class)型查询Hibernate

java - 如何从消息数组中删除项目

python - 当所有 ThreadPoolExecutor 线程都忙时,如何等待?

c++ - Boost.Thread 还是::thread?

java - JSONObject 应在路径 $ 中找到属性为 ['XXX' ] 的对象

java - JTable、Java 中的列标题名称

java - 从 SPinnerDateModel 的 Jspinner 获取日期

android - 是否可以编写无需外部应用程序即可发送电子邮件的代码?

android - Android 上的 MP3 解码速度慢

postgresql - 如何创建一个通常在条目更新之前的条目后运行的函数?