通过上篇博客对AsyncTask源码进行分析之后,我们对AsyncTask的任务执行有了一个大致了解,但是在那篇博客中我有一个
问题还没有分析到,那就是线程执行体SerialExecutor类,下面我们来看一下SerialExecutor类的源码。
private static class SerialExecutor implements Executor {
final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>();
Runnable mActive;
public synchronized void execute(final Runnable r) {
mTasks.offer(new Runnable() {
public void run() {
try {
r.run();//真正执行Callable中run方法的地方
} finally {
scheduleNext();//等待线程池中的任务执行完毕后,再往线程池中添加任务
}
}
});
if (mActive == null) {
scheduleNext();
}//第一次被执行后,以后这段代码都不会被执行了。
}
//下面的方法实现的效果是:从队列首部取出任务并删除,然后将取出的任务放入到线程池中。
protected synchroni