我正在使用附加到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退出()之后终止(退出,死掉),假设该线程没有执行其他执行吗?
答案 0 :(得分:2)
HandlerThread实例在其Looper退出()之后终止(退出,死掉),假设该线程没有执行其他执行吗?
在Looper退出之后,如果在run()中没有执行其他处理,则工作线程的run()方法返回。此时,handlerThread.isAlive()
返回false,handlerThread.getState()
返回TERMINATED。
请注意,如Thread API doc所述,多次启动一个帖子是不合法的。
答案 1 :(得分:0)
在另一个答案中提到,Java中的线程永远不会被垃圾收集。
不,它没有。你的链接没有提到任何这样的事情。
当一个线程无法访问时,它就像任何其他对象一样有资格进行垃圾收集。如果线程在退出之前无法发生。 那就是你的链接所说的。
你的问题是基于一种误解。