- 若是進程中沒有四大組件,其優先級將會下降,intentservice 是service封裝了handerthread ,這是intentservice的優勢
- 線程是操做系統的最小調度單元,是系統的一種受限制的系統資源,建立和銷燬線程都將有對應的開銷,因此使用線程池來避免這種開銷
- Android中的線程形態: AsyncTask 、HandlerThread、IntentService
- 線程池的優勢:避免線程建立銷燬的開銷、控制線程池的最大併發數,避免搶佔資源致使的阻塞、簡單的線程管理功能,好比定時執行等功能
- ThreadPoolExecutor: corePoolSize 核心線程數,即便閒置也將存活,allowCoreThreadTimeout 爲true將會在閒置的時候有一個超時,keepAliveTime 就是這個超時時間
- ThreadPoolExecutor:maximumPoolSize 這個線程池所能容納的最大的線程數,當活動線程數達到這個數值的時候新的任務將會阻塞
- ThreadPoolExecutor:keepAliveTime 非核心線程閒置時的超時時長,當allowCoreThreadTimeout爲true的時候這個值一樣用於核心線程
- ThreadPoolExecutor:unit制定keepalivetime的時間單位
- ThreadPoolExecutor:workQueue線程池中的任務隊列,經過線程池的execute方法提交的runnable對象將會存儲在這個參數中
- Threadpoolexecutor:threadfactory,爲線程池提供建立新線程的功能
- ThreadPoolExecutor:執行流程,
(1)先比較corepoolsize 若是運行中的線程數少於這個數,直接啓動核心線程運行任務
(2)若是核心線程運行已經滿負荷,將會把任務添加到workqueue中
(3)若是workqueue滿了,就啓動非核心線程執行任務
(4)若是(3)中的線程數量已經大於maximun就reject會調用rejectExecptionHandler
- AsyncTask的corepoolsize= cpuconnt+1,maximunpoolsize = cpucount x2 + 1,keepalivetime = 1s, workqueue size = 128
四種線程池
1 fixedthreadpool 只有核心線程 corepoolsize = maximumpoolsize keepalivetime =0 workqueuesize無限制
能夠更快的響應外界的請求
2 cachedthreadpool corepoolsize = 0, maximumpoolsize=integer.maxvalue ,keepalivetime = 60s 當全部線程都處於運行狀態,將會啓動新的線程來作事情,不然使用空閒的線程來作事情,當一個線程閒置超過60s就會被回收,因此若是這個threadpool 閒置時幾乎不佔系統資源
3 schedulethreadpool corepoolsize 是固定的,maximumpoolsize= integer.maxvalue 主要用於執行定時任務,和具備固定週期的任務,併發
4 siglethreadpool corepoolsize=maximumpoolsize=1 keepalivetime=0,workqueuesize 沒有限制 單線程執行操作系統