您的位置:首页 > 其它

AsyncTask在SDK 3.0前后的区别

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

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

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

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

    2.新增了executeOnExecutor()接口:

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

3.新增了两个定制线程池SERIAL_EXECUTOR和THREAD_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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AsyncTask 版本