我的应用程序由单个Activity
. 在这个活动中,我创建了多个HandlerThread
在循环中运行以执行套接字阻塞操作的 s。
目前,我HandlerThread
在Activity.onDestroy()
.
有时,当我打开我的应用程序,关闭它并重新启动它时,它会崩溃(很多时候是由于将消息发布到未运行的处理程序线程)。
我的问题是:当我关闭我的应用程序时,正确的关闭方式是什么?HandlerThread
(请注意,这些线程可能会阻塞套接字操作)。
编辑:更多信息: 我有一个在 onCreate 中启动的处理程序线程池(当我第一次启动我的应用程序时没问题)。
每个处理程序可运行循环都用一个
if (shouldRun) {
//body
}
else {
close();
}
陈述。
close 方法删除所有挂起的消息和可运行项,并向处理程序发布一条消息,这将导致他调用它的looper.quit()
. 这样,如果当前的处理程序线程被 IO 操作阻塞,只有当它完成它才会退出()。