android源码分析 - AysncTask

基于android10.0.0源码分析

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

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

先来个源码的例子

android源码分析 - AysncTask_第1张图片

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


step1、

step2、

android源码分析 - AysncTask_第2张图片

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

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

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

android源码分析 - AysncTask_第3张图片

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

android源码分析 - AysncTask_第4张图片

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

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

android源码分析 - AysncTask_第5张图片

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

我们来看看初始化代码

android源码分析 - AysncTask_第6张图片

这里先走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;

}


接收异步消息的代码:

android源码分析 - AysncTask_第7张图片

mTask.finish的实现代码如下:


android源码分析 - AysncTask_第8张图片

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

你可能感兴趣的:(android源码分析 - AysncTask)