我的应用程序由一个Activity
。在此活动中,我将创建多个HandlerThread
循环运行以执行套接字阻塞操作。
目前我向这些人中的每个人发布了退出消息HandlerThread
在我期间Activity.onDestroy()
.
有时,当我打开应用程序、关闭它并重新启动它时,它会崩溃(很多时候是由于向未运行的处理程序线程发布消息)。
我的问题是:正确的关闭方式是什么HandlerThread
当我关闭我的应用程序时?(请注意,这些线程可能会阻塞套接字操作)。
编辑:更多信息:我有一个在 onCreate 中启动的处理程序线程池(当我第一次启动我的应用程序时没有问题)。
每个处理程序可运行循环都用一个
if (shouldRun) {
//body
}
else {
close();
}
陈述。
close 方法删除所有挂起的消息和可运行对象,并向处理程序发布一条消息,这将导致他调用其looper.quit()
。
这样,如果当前处理程序线程被 IO 操作阻塞,只有当它完成后,他才会 quit()。
是的,关闭它是个好主意。还要确保删除您的回调。
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacksAndMessages(null);
handler.getLooper().quit();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)