销毁活动时是否应该手动关闭应用程序创建的 HandlerThreads?

2024-04-20

我的应用程序由一个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(使用前将#替换为@)

销毁活动时是否应该手动关闭应用程序创建的 HandlerThreads? 的相关文章

随机推荐