【发布时间】:2020-09-15 00:58:26
【问题描述】:
runOnUiThread() 处理已关闭的活动时遇到问题。逻辑如下:
在活动一中,我导航到活动二。
在活动二中,我正在做一些后台抓取,完成后,我导航到活动三。
问题是,如果我在仍在获取数据的同时关闭活动二,我的线程会继续运行,并且由于在我的代码中调用了 runOnUiThread(),活动一会得到执行,它会将我导航到活动三。我不希望这种情况发生。我希望线程停止,或者至少让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
}
});
}
});
我尝试在活动关闭时关闭执行器服务,虽然我可以验证 onDestroy() 是否被 console.log 语句调用,但它似乎既不是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
}
}
编辑:如何添加中断器以中断线程?
【问题讨论】:
-
这就是他们创建
ViewModel的原因。 developer.android.com/topic/libraries/architecture/viewmodel