Async Task的 onCanceled()方法和onPostExecute()方法互斥
Async Task之前是串行執(zhí)行任務(wù),后來采用線程池異步執(zhí)行任務(wù),再后來為了避免并發(fā)錯誤,
execute()又采用串行執(zhí)行任務(wù),但是可以通過executeOnExecutor()來串行執(zhí)行任務(wù)。
AsyncTask里面有兩種線程池供我們調(diào)用
1. THREAD_POOL_EXECUTOR, 異步線程池
2. SERIAL_EXECUTOR,同步線程池
一個是異步線程池,多個任務(wù)在線程池中并發(fā)執(zhí)行;還有一個是同步執(zhí)行的。默認調(diào)用execute,是使用SERIAL_EXECUTOR
- AsyncTask里面有THREAD_POOL_EXECUTOR和SERIAL_EXECUTOR兩種方式來異步執(zhí)行任務(wù);THREAD_POOL_EXECUTOR是異步的,而SERIAL_EXECUTOR任務(wù)是順序執(zhí)行的。
- THREAD_POOL_EXECUTOR如果添加的任務(wù)過多,沒有及時處理的話,會導(dǎo)致程序崩潰,它的隊列size是128;它的調(diào)度規(guī)則是核心池大小,隊列大小,以及最大線程數(shù)和異常處理Handler來決定的。
- SERIAL_EXECUTOR本質(zhì)是在THREAD_POOL_EXECUTOR的基礎(chǔ)上添加一個mTasks的集合來保證任務(wù)的順序執(zhí)行。