我有一个AsyncTask,我在Activity的onPause生命周期事件中关闭它,以便当有人离开应用程序时它不再运行,但是它仍然持续进行。 我添加了一些跟踪,以下代码片段显示了问题。
Trace.d(TAG,"Task state: " + myTask.getStatus() );
myTask.cancel(true);
Trace.d(TAG,"Task state: " + myTask.getStatus() );
输出:
Task state: RUNNING
Task state: RUNNING
为什么cancel()方法对任务的状态没有任何影响?我注意到文档中说cancel方法将“尝试”停止任务,但在什么情况下会失败?这个任务肯定正在运行,因为它每十秒输出一次日志,并且正如你上面看到的那样,它的状态被返回为running。更新:我添加了跟踪代码以显示isCancelled()的状态,而它的状态确实发生了改变。所以调用cancel(true)将取消状态从false更改为true,但显然对状态或线程的停止没有任何影响。
finish()
被调用时,状态才会被设置为“FINISHED”,而这发生在由FutureTask
使用的内部处理程序中。cancel()
和isCancelled()
实际上是在该FutureTask
成员上调用的。如果该任务被取消,则会调用onCancelled()
。这能用于测试吗?来源:http://www.google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/os/AsyncTask.java&d=3 - bigstones