AsyncTask
3.0之前规定同一时刻能够运行的线程数为5个,线程池总大小为128。也就是说当我们启动了10个任务时,只有5个任务能够立刻执行,另外的5个任务则需要等待,当有一个任务执行完毕后,第6个任务才会启动,以此类推。而线程池中最大能存放的线程数是128个,当我们尝试去添加第129个任务时,程序就会崩溃。
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 和3.0 之前一样支持5个线程异步执行
AsyncTask.execute() 和 executeOnExecutor(AsyncTask.SERIAL_EXECUTOR) 一样,同步执行,一个一个执行
mAsyncTask.executeOnExecutor(Executors.newFixedThreadPool(10)); 自定义线程个数,进行异步执行
而3.0之后的AsyncTask同时只能有1个任务在执行
Executor exec = new ThreadPoolExecutor(15, 200, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
new DownloadTask().executeOnExecutor(exec);
这样就可以使用我们自定义的一个Executor来执行任务,而不是使用SerialExecutor。上述代码的效果允许在同一时刻有15个任务正在执行,并且最多能够存储200个任务。
遇过坑,就记录一下