内容点:
- AsyncTask由哪些内容组成?
- 一个AsyncTask对象只能调一次execute,为什么?
- AsyncTask是串行还是并行?
本文是自己开始看源码的记录,希望能给相同刚开始看源码的同志一个参考。
1、AsyncTask的组成成员:
- ThreadPoolExecutor THREAD_POOL_EXECUTOR
//线程池,真正执行任务的线程 - WorkerRunnable<Params, Result> mWorker
//封装参数作为成员变量,构造方法中新建匿名内部类,重写call方法,调用doInBackground()方法。 - FutureTask mFuture;
//用于封装mWorker,并重写done方法 - Executor SERIAL_EXECUTOR
//用于再封装FutureTask,并使用ArrayDeque 的offer和pull方法对任务一个个传给线程池去排序执行。
2、一个AsyncTask对象只能调一次execute,为什么?
在AsyncTask中由个Status(PENDING,RUNNING,FINISHED)枚举,execute()一执行就讲状态修改未Running,所以在此调用则直接抛出异常。
3、AsyncTask是串行还是并行?
AsyncTask实际是有任务管理器和真正执行的线程池而者组合。
任务管理器串行分发任务
线程池可并行执行任务,但每次只能接受到一个任务,
所以AsyncTask是串行执行任务,一个执行完才执行另外一个。