AsyncTask相关

参考:

http://blog.csdn.net/lmj623565791/article/details/38614699
http://blog.csdn.net/singwhatiwanna/article/details/9272195

原理:

666

18行:设置当前AsyncTask的状态为RUNNING,上面的switch也可以看出,每个异步任务在完成前只能执行一次。
20行:执行了onPreExecute(),当前依然在UI线程,所以我们可以在其中做一些准备工作。
22行:将我们传入的参数赋值给了mWorker.mParams ,mWorker为一个Callable的子类,且在内部的call()方法中,调用了doInBackground(mParams),然后得到的返回值作为postResult的参数进行执行;postResult中通过sHandler发送消息,最终sHandler的handleMessage中完成onPostExecute的调用。
23行:exec.execute(mFuture),mFuture为真正的执行任务的单元,将mWorker进行封装,然后由sDefaultExecutor交给线程池进行执行。

对比Handler+Thread

1、Handler+Thread

麻烦之处在于UI的更新牵涉较多,单个异步后台显得代码过多,而且频繁的new thread也不好。但是多个后台比较清晰,可控性好。

2、AsyncTask

比较轻量级,单个后台可用,系统封装好的UI更新,但是不可太耗时(最多几秒)。
但是由于版本的问题,1.6之前,3.0以后是队列形式,中间版本是并发(最大支持128的并发,10个任务等待,即138个任务,超过则异常),但是也可强制开启多线程执行executeOnExecutor()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容