【解疑答惑】—— AsyncTask的cancel方法失效的原因

阅读: 评论:0

【解疑答惑】—— AsyncTask的cancel方法失效的原因

【解疑答惑】—— AsyncTask的cancel方法失效的原因

问题描述:

  • 当我们退出Activity的时候,AsyncTask可能还在执行
    • 我们想在activity退出,关闭AsyncTask,想到了它的cancel()方法
    • 参数为true的时候,AsyncTask中的线程正在运行也要被关闭;false等到线程执行完再取消
    • 但是事实证明,调用这个cancel方法并没有关闭Asynctask

那么问题就来了,既然叫cancel为什么不能取消Asynctask呢

  • 查看源码可以看到
  • 调用cancel(boolean)就会间接调用iscancelled(),返回true;

     public final boolean cancel(boolean mayInterruptIfRunning) {mCancelled.set(true);return mFuture.cancel(mayInterruptIfRunning);
    }
    
  • 其实这个方法是给Asynctask设置了”canceled”状态,也就是说让线程池中的某个控制状态的的标志位变为CANCEL状态

  • 然后在onProgressUpdate()、doInBackground()这两个方法中,刚开始的时候会判断线程中是否取消状态,true的话return

  • 这也就是为什么我们调用cancel(),AsyncTask没有取消的原因

本文发布于:2024-02-04 23:47:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170719144160862.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:原因   方法   AsyncTask   cancel
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23