本文總結(jié)自Android實(shí)戰(zhàn)技巧:深入解析AsyncTask
AsyncTask的兩種執(zhí)行方式
-
execute(Params... params)
Android2.3以前的版本
核心線程數(shù) = 5表牢,同時(shí)并發(fā)執(zhí)行5個(gè)任務(wù),超過5個(gè)則放入緩存隊(duì)列
Android2.3以前的版本
Android 3.0以后的版本
核心線程數(shù) = 1,只能一個(gè)一個(gè)任務(wù)進(jìn)行彰导,超過一個(gè)則放入緩存隊(duì)列
Android 3.0以后的版本 -
executeOnExecutor(Executor exec, Params... params)
Android 3.0以后新增的可自定義線程池的執(zhí)行方式
executeOnExecutor中Executor 的四種常用參數(shù)
-
Executors.newCachedThreadPool()
未設(shè)置限制敲茄,可并發(fā)多個(gè)任務(wù)的線程池(據(jù)說線程上限為128個(gè),未驗(yàn)證)
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return null;
}
}.executeOnExecutor(Executors.newCachedThreadPool(),"");
9個(gè)線程并發(fā)
-
Executors.newFixedThreadPool(n)
設(shè)置并發(fā)n個(gè)任務(wù)的線程池
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return null;
}
}.executeOnExecutor(Executors.newFixedThreadPool(7),"");
線程數(shù)量為7
- AsyncTask.SERIAL_EXECUTOR
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return null;
}
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR,"");
效果和直接使用execute一致
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return null;
}
}.execute("");
-
AsyncTask.THREAD_POOL_EXECUTOR
效果和Executors.newCachedThreadPool()一致
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return null;
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");