正在运行的 AsyncTask 的 .cancel(boolean) 方法如何工作?这是文档:
尝试取消此任务的执行。如果任务已完成、已被取消或由于其他原因无法取消,则此尝试将失败。如果成功,并且在调用取消时此任务尚未启动,则此任务不应该运行。如果任务已经开始,则 mayInterruptIfRunning 参数确定是否应该中断执行该任务的线程以尝试停止该任务。
调用此方法将导致在 doInBackground(Object[]) 返回后在 UI 线程上调用 onCancelled(Object)。调用此方法可确保永远不会调用 onPostExecute(Object)。调用此方法后,应定期从 doInBackground(Object[]) 中检查 isCancelled() 返回的值,以尽早完成任务。
第二段暗示程序员在调用取消后尽快从 doInBackground 方法返回(通过定期检查 isCancelled() )。但是在测试中,即使我不这样做,我的 AsyncTask (doInBackground 方法)似乎也会在调用取消之后立即停止。谁能解释一下?(顺便说一句,当调用取消时,Logcat 没有显示任何发生的事情)。
protected Void doInBackground(Void... V) {
for (int v=3;v>0;v--){
publishProgress(v);
try {Thread.sleep(1500);} catch (InterruptedException e) {}
}
return null;
}
此外,无论提供的 mayInrerruptIfRunning 值如何,都会发生这种情况,因此如果可以解释该值的来源,那也将非常感激。