關鍵詞:線程 / 線程池 / AsyncTask / IntentService / Handler
本次筆記主要梳理了 Android 的線程與線程池的相關知識點。從用途上來說,線程分為 主線程 和 子線程,主線程處理和界面相關的事情,子線程則往往用于處理執行耗時的操作。除了 Thread 本身之外,扮演線程角色的還有很多,比如:AsyncTask、IntentService、HandlerThread… 對于 AsyncTask 來說,它的底層用到了線程池,對于 IntentService 和 HandlerThread 來說,它們的底層則直接使用了線程。當系統中存在大量的線程時,系統會通過時間片輪轉的方式調度每一個線程,線程不可能做到絕對的并行,正確的做法是采用線程池,一個線程池會緩存一定數量的線程,通過線程池就可以避免因為頻繁創建和銷毀線程所帶來的系統開銷。Android 中的線程池來源于 java,主要通過 Executor 來派生特定類型的線程池,不同種類的線程池具有各自的特性。
線程池的好處:
重用線程池中的線程,避免因為線程的創建和銷毀所帶來的性能開銷;能有效的控制線程池的最大并發數,避免大量的線程之間因互相搶占系統資源而導致的阻塞現象;能夠對線程進行簡單的管理,并提供定時執行以及指定間隔循環執行等功能;線程池的分類:
FixedThreadPool 它是一種進程數量固定的線程池,當線程處于空閑的時候,它們并不會被回收,除非線程池被關閉了;CacheThreadPool 它是一種線程數量不定的線程池,它只有非核心線程,并且其最大的線程數為 Integer.MAX_VALUE;ScheduledThreadPool 它的核心線程數量是固定的,而非核心線程的數量沒有限制,并且當非核心線程閑置的時候會被立即回收;SingleThreadExecutor 此類線程池中只有一個核心線程,它確保所有的任務都在同一個線程中按順序執行;End.
Note by HF. Learn from 《Android 開發藝術探索》
新聞熱點
疑難解答