如何解决从ThreadExecutor调用时,runOnUiThread作用于封闭的活动
我在runOnUiThread()
上从事封闭活动时遇到了问题。这是逻辑:
在活动1中,我导航到活动2。
在活动2中,我正在做一些后台获取,一旦完成,我将导航至活动3。
问题在于,如果在仍获取数据的同时关闭活动2,则线程将继续运行,并且由于在代码中调用了runOnUiThread()
,因此活动1被执行,并且将我导航至活动3。我不希望那样发生。我希望线程停止运行,或者至少让runOnUiThread()
中的事物不要触摸创建该线程所在的活动之外的其他任何活动。
注意:在我的示例中,它正在启动活动,但其中的其他代码可能与以相同方式触发的UI相关。
这是我的代码:
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
public void run() {
// Do fetching of data
runOnUiThread(new Runnable() {
@Override
public void run() {
// Navigate to activity three
}
});
}
});
我尝试在活动关闭时关闭执行程序服务,并且虽然我可以使用console.log语句验证onDestroy()的调用,但它似乎shutdown()
或shutdownNow()
都没有起作用:
@Override
protected void onDestroy() {
super.onDestroy();
if (executorService != null) {
executorService.shutdown(); // Does not work to stop thread from executing
executorService.shutdownNow(); // Does not work to stop thread from executing
}
}
编辑:如何向其中添加一个中断器以能够中断线程?
解决方法
您将必须在Runnable类中添加ExecutorService.isShutdown()
的支票。 ExecutorService.shutdown()
和ExecutorService.shutdownNow()
不保证先前提交的任务将立即关闭。
根据文档
ExecutorService.shutdown()
启动有序关闭,其中先前提交的任务位于 执行,但不会接受新任务。调用没有 如果已经关闭,则具有其他效果。 此方法不等待先前提交的任务完成执行。
ExecutorService.shutdownNow()
尝试停止所有正在执行的任务,停止处理 等待的任务,并返回正在等待的任务的列表 执行。
此方法不等待主动执行的任务终止。
除了尽最大努力停止处理外,没有任何保证 积极执行任务。例如,典型的实现将 通过Thread.interrupt()取消,因此任何无法响应的任务 中断可能永远不会终止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。