取消没有实例的异步任务(Android)

Posted

技术标签:

【中文标题】取消没有实例的异步任务(Android)【英文标题】:Cancel asynctask without instance (Android) 【发布时间】:2020-08-30 01:38:16 【问题描述】:

我在 android 的一个活动中有多个异步任务,我通常这样称呼它们:

new call_SOAPCheck().execute();

或者像这样

new MainActivity.DownloadTask(getApplicationContext()).execute("http://.....");

我想在按下后退按钮时取消任何正在运行的异步任务,但由于我没有创建实例,我无法调用 .cancell(true)。

有没有办法杀死没有实例运行的异步任务?

我这样称呼它们的原因是我需要在同一个活动中多次执行它们,如果我将它们声明为“全局”变量,我会收到一个错误,我只能执行一次。

另外,我的 asynctask 中没有循环,所以我不能定期检查 isCancelled()

【问题讨论】:

【参考方案1】:

为什么不保留参考并重新创建它们:

不要这样做:

new call_SOAPCheck().execute();

这样做:

//keep a global ref

call_SOAPCheck task; 

然后,每当您想一次又一次地调用任务时,只需一遍又一遍地重新创建。通过这样做:

private void callTaskAgain()

task = new call_SOAPCheck();
task.execute();


【讨论】:

以上是关于取消没有实例的异步任务(Android)的主要内容,如果未能解决你的问题,请参考以下文章

Android取消多次调用的异步任务

async和await异步编程资源汇总

Android异步任务不会改变用户界面

浅谈android中异步加载之"取消异步加载"二

我如何知道取消的异步任务是不是完成?

如何从客户端取消异步任务