gpt4 book ai didi

android - 如何使用暴力取消 AsyncTask

转载 作者:行者123 更新时间:2023-11-29 15:13:02 25 4
gpt4 key购买 nike

大多数开发人员不知道,即使 Activity 已被 finish() 编辑,由它启动的 AsyncTasks 也会一直运行到完成。一些开发人员知道,即使在 onStop() 中调用 asyncTask.cancel(true),AsyncTask 仍将运行直到完成,因为所有 .cancel( true) 确实,是提出一个标志,我们应该在 doInBackground 中的每个操作之前定期检查并手动返回。但是,如果我们执行的是长时间运行的操作,则无法在操作持续时间内进行此检查,因此实际上我们什么都不做。

我已经阅读了有关为给定 AsyncTask 分配线程 ID 的提示,因此我们可以立即通过其 ID 终止线程。

这可能吗?它是怎么做到的?

编辑:这是我尝试停止长时间运行的网络操作时所做的事情:

   while ((line = reader.readLine()) != null) {
/**
* Helps an AyncTask being cancelled to really be cancelled
* amidst execution, instead of waiting for the whole network
* operation to finish
*/
Thread.sleep(1);
sb.append(line + "\n");
}

然后我至少可以取消这个操作。

最佳答案

永远不要 通过线程 ID 终止线程,除非您在操作系统级别完全终止整个应用程序。您不知道该线程处于什么状态。它可能打开文件以进行写入或其他资源,这将使应用程序处于不一致状态,可能是永久状态。这就是不推荐使用 Java 的 Thread.stop() 的原因。正确的答案是取消异步任务,然后让任务偶尔检查 isCanceled 并在它返回 true 后自行终止,然后给它时间清理自己。除此之外,让任务运行到完成更安全。

关于android - 如何使用暴力取消 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com