AsyncTask doInBackgroud not running

最近在项目中发现使用谷歌自带的AsyncTask 时,doInBackgroud不执行的情况,最初以为是AsyncTask的系统bug,后面查找资料后发现并不是这么回事,具体情况如下:

AsyncTask运行有两种模式,一种串行,一种是并行;

串行模式下当前App进程所有的Task任务一个个的执行,下一个任务必须等待上一个任务执行完后才会执行

并行模式下当前App进行所有的Task任务可以并发执行,两个任务之间没有上下关系

AsyncTask.execute() 方法在Android1.6 API 4之前是串行执行,在1.6 到 Android2.3 API 9之间是并行执行,在Android3.0 API 11 后又改回串行执行;

在Android3.0 API11 之后提供了一个新方法 AsyncTask.executeOnExecutor()实现并行执行

因此在代码中要能够兼容所有的版本的写法是:

if(Build.VERSION.SDK_INT >= Build.VERSION.CODES.HONEYCOMB){

  myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

}else{

  myTask.execute();

}

注意:

1.executeOnExecutor 会检查targetSdkVersion , 果如小于或等于API 12 ,将会强制将串行任务改为并行任务,因此AsyncTask要运行并行模式在3.0 API11之后必须要知道targetSdkVersion

2.项目中尽量避免在AsyncTask.doInBackground中执行循环任务:如心跳之类的




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值