Android線程調度機制
線程調度機制
- 分時調度模型:所有的線程輪流獲得CPU使用權,平均分配每個線程佔用的CPU時間
- 搶佔式調度模型:優先讓可運行池中的優先級高的線程佔用CPU,優先級相同隨機選擇一個線程
Android線程調度機制
Android的線程調度機制是搶佔式調度模型
線程優先級(nice):默認情況下,新創建的線程的優先級默認與母線程一致
線程分組:Android還分前臺線程與後臺線程
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)
Android異步方式
- Thread:直接創建一個線程
- AsyncTask:爲UI線程與工作線程之間進行快速的切換提供一種簡單便捷的機制。適用於當下立即需要啓動,但是異步執行的生命週期短暫的使用場景()
- handerThread:爲了某些毀掉方法或者等待某些任務的執行設置一個專屬的線程,並提供線程任務的調度。(handerThread繼承了Thread+handler機制)參考文章:手把手教你使用HandlerThread
- ThreadPool:把任務分解成不同的單元,分發到各個不同的線程上,進行同時併發處理。
- IntentService:適合用於執行由於UI觸發的Service任務,並可以在後臺任務執行的情況通過一定的機制反饋給UI(IntentService繼承自Service,裏面用的是HandlerThread)
- Loaders:Android系統提供了LoaderManager(裏面用的AsyncTask)
Android線程優化
- 線程指定線程名,對線程分組便於問題排查
- 合理指定線程優先級
- 採用線程池複用線程
- 合適的場景選擇合適的異步方式
- 控制整個應用的總線程數量,應用各個模塊複用線程
- 不再使用的HandlerThread需要退出
- 不要直接使用創建線程,應該採用線程池