J. *_* K. 1 multithreading android android-asynctask
大多数开发人员都不知道,即使活动已经被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");
}
Run Code Online (Sandbox Code Playgroud)
然后我至少可以取消这个操作.
除非您在操作系统级别完全终止整个应用程序,否则切勿通过其ID终止线程.你不知道该线程处于什么状态.它可能有文件打开写入或其他资源,这将使应用程序处于不一致状态,可能永久.这就是为什么Java的Thread.stop()被弃用了.正确的答案是取消异步任务,然后偶尔检查isCanceled,如果返回true则终止自身,给它时间清理自己.除此之外,让任务运行完成更安全.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |