android源码分析 - AysncTask

基于android10.0.0源码分析

源码地址(最近墙不出去,贴其他源码地址)

https://www.androidos.net.cn/android/10.0.0_r6/xref/frameworks/base/core/java/android/os/AsyncTask.java

先来个源码的例子

源码分析先从AysncTask.execute()入口


step1、

step2、

蓝框1部分:如果当前AysncTask正在运行或者已经完成,AysncTask将不能重复执行

蓝框2部分:回调onPreExecute(); 即前面demo部分

蓝框3部分:params参数最终传递给

蓝框4部分:exec.execute(mFuture),exec是指 sDefaultExecutor,而sDefaultExecutor实现了Executor

mTasks.offer(new Runnable() {......}});

是将FutureTask压入ArrayDeque,然后在schedualNext出栈。THREAD_POOL_EXECUTOR.execute(mActive);我们看下THREAD_POOL_EXECUTOR是什么东西?

其实就是通过线程池来跑FetureTask,那么这个FetrueTask又是干什么呢?

我们来看看初始化代码

这里先走mWork的call,在call里面调用了result = doInBackground(mParams);然后通过调用PostResult

发送异步消息

private Result postResult(Result result) {

@SuppressWarnings("unchecked")

Message message = getHandler().obtainMessage(MESSAGE_POST_RESULT,

            new AsyncTaskResult(this, result));

    message.sendToTarget();

    return result;

}


接收异步消息的代码:

mTask.finish的实现代码如下:


上面的代码分析分析了AysnTask的过程,实质就是线程池+handler异步消息

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

推荐阅读更多精彩内容