AsyncTask在SDK 3.0前后的区别

          AsyncTask 是在SDK 1.5 版开始使用,最处运行时是按顺序运行,也就是说在运行多个任务时,AsyncTask 会一个一个的执行这些任务,上一个任务执行完毕才会执行下一个,这样大大的影响了执行效率。

在SDK1.6之后2.3之前AsyncTask的执行顺序修改为并行执行了。如果同时执行多个任务,则这些任务会并行执行,这时的AsyncTask内部的线程池最大数量是5个,也就是说一次最多同时执行5个线程,超出这个范围的只能等待前面的某一个线程执行完再执行。如果某一应用需要大量的线程去执行任务,由于AsyncTask的这一局限性,我们只能放弃使用AsyncTask而自定义线程池.

在SDK3.0开始 google对AsyncTask API进行了又一次调整,调整如下:

                    1.又调回了最初了单任务执行,按照先后顺序每次只执行一个,前一个执行完之后才执行第二个。

    2.新增了executeOnExecutor()接口:

这个接口允许开发者提供自定义的线程池来运行,如果需要更多的任务都能同时运行,我们可以创建 一个newCachedThreadPool ()线程池给AsyncTask。这样就改变了AsyncTask的默认状态,是AsyncTask 具有了newCachedThreadPool()的特性。

3.新增了两个定制线程池SERIAL_EXECUTORTHREAD_POOL_EXECUTOR

SERIAL_EXECUTOR 的作用是保证任务执行的顺序,保证提交的任务确实是按照先后顺序执行的。 SERIAL_EXECUTOR 内部有一个队列用来保存所提交的任务,保证当前只运行一个,这样就可以保 证任务是完全按照顺序执行的。

用法:execute() 的默认值就是SERIAL_EXECUTOR 或者

executeOnExecutor(AsyncTask.SERIAL_EXECUTOR)

THREAD_POOL_EXECUTOR是一个corePoolSize为5的线程池,也就是说最多只能有5个线程同时运 行,超过5个的就要等待

用法:executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值