大多数开发人员不知道,即使活动已被finish()
-ed,AsyncTasks启动它直到完成。 一些开发人员知道,即使在onStop()
中您拨打asyncTask.cancel(true)
,AsyncTask仍会运行直到完成,因为所有.cancel(true)
都会提出一个标志,我们应该在每次操作前定期检查并在doInBackground
之前手动返回。 但是,如果我们正在进行长时间运行的操作,我们无法在操作持续时间内进行检查,所以我们无效。如何使用蛮力取消AsyncTask
我读过关于给给定的AsyncTask分配一个线程ID的提示,所以我们可以通过它的ID立即终止线程。
这可能吗?它是如何完成的?
编辑:这是我做什么,当我试图阻止长时间运行的网络操作:
,然后我可以取消至少此操作。
如何从我们需要显示到ImageView的互联网上下载的图像,但在用户离开此画面 - 这是资源的完全浪费。我真的希望能够取消这个 – 2015-02-09 21:59:41
我已经编辑了我的问题,以便我停止网络操作 – 2015-02-09 22:02:03
无关紧要 - 无法知道在某个点取消线程是否会导致全局性问题变量在HTTP堆栈中,或者持有一个会使其他线程死锁的信号量。更不用说AsyncTasks共享线程,因此停止线程可能会破坏所有其他异步任务。现在有可能您的http堆栈可能具有取消功能。如果是这样的话应该是安全的,让你的任务覆盖取消调用它(并记得打电话super.cancel()) – 2015-02-09 22:04:36