Java 当从ThreadExecutor调用时,runUnuithRead()作用于关闭的活动

Java 当从ThreadExecutor调用时,runUnuithRead()作用于关闭的活动,java,android,runnable,Java,Android,Runnable,我在执行已关闭的活动时遇到问题。逻辑如下: 在活动一中,我导航到活动二 在活动2中,我正在进行一些背景提取,完成后,我将导航到活动三 问题是,如果在仍在提取数据时关闭活动2,我的线程将继续运行,并且由于runOnUiThread()在我的代码中被调用,活动1将被执行,并将我导航到活动3。我不想那样。我希望线程停止,或者至少让runOnUiThread()中的内容不触及除创建线程的活动之外的任何其他活动 注意:在我的示例中,它正在启动一个活动,但其中可能包含与以相同方式触发的UI相关的其他代码 下

我在执行已关闭的活动时遇到问题。逻辑如下:

在活动一中,我导航到活动二

在活动2中,我正在进行一些背景提取,完成后,我将导航到活动三

问题是,如果在仍在提取数据时关闭活动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
            }
        });
    }
});
我尝试在活动关闭时关闭executor服务,虽然我可以验证是否使用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
    }

}

编辑:如何向该类添加中断程序以中断线程?

您必须在可运行类中添加对ExecutorService.IsShutton()的检查
ExecutorService.shutdown()
ExecutorService.Shutdownow()
不保证以前提交的任务会立即关闭

根据文件,

ExecutorService.shutdown()

启动有序关机,在该关机过程中,以前提交的任务将被删除 已执行,但不会接受新任务。调用没有任何限制 如果已经关闭,则会产生附加效果。 此方法不会等待以前提交的任务完成执行

ExecutorService.shutdownNow()

尝试停止所有正在执行的任务,停止处理 等待的任务,并返回等待的任务列表 执行

此方法不会等待主动执行的任务终止

除了尽最大努力尝试停止处理外,没有其他保证 积极执行任务。例如,典型的实现将 通过Thread.interrupt()取消,因此任何无法响应的任务 中断可能永远不会终止


您必须在可运行类中添加对ExecutorService.isshutton()的检查
ExecutorService.shutdown()
ExecutorService.Shutdownow()
不保证以前提交的任务会立即关闭

根据文件,

ExecutorService.shutdown()

启动有序关机,在该关机过程中,以前提交的任务将被删除 已执行,但不会接受新任务。调用没有任何限制 如果已经关闭,则会产生附加效果。 此方法不会等待以前提交的任务完成执行

ExecutorService.shutdownNow()

尝试停止所有正在执行的任务,停止处理 等待的任务,并返回等待的任务列表 执行

此方法不会等待主动执行的任务终止

除了尽最大努力尝试停止处理外,没有其他保证 积极执行任务。例如,典型的实现将 通过Thread.interrupt()取消,因此任何无法响应的任务 中断可能永远不会终止


这就是他们创建
ViewModel
的原因。这就是他们创建
ViewModel
的原因。