1.AsyncTask的局限性:一般用来执行少量且时间短的任务。
我们知道AsyncTask类中,维护着一个线程池类,而自android 3.2版本起,应用中所有的 AsyncTask 都共用一个线程池类,如果执行大量或时间长的话,可能会造成其他 AsyncTask 的阻塞。
2.找源码
1. 从构造器入手
![]()
2. crtl + f 查找 sDefaultExecutor,发现它是一个类变量,类变量,类变量
![]()
3.接下来继续 crtl + f 查找 THREAD_POOL_EXECUTOR,可以看到静态代码块里对THREAD_POOL_EXECUTOR进行了初始化,到这里可以看出所有 AsyncTask 都是共用一个线程池的了
![]()
4.再了解一点,AsyncTask 线程池的核心线程数和最大线程数都跟 CPU 的数量相关,任务序列的容量大小是128
![]()
网友评论