標題還沒想到要取什麼
BG thread
android 大部分的code執行在mainthread(UI thread)中。
一旦我們在main thread增加執行複雜費時的code後,這些code可能會長期占用main thread資源,讓main thread UI drawing有延遲現象, 發生drop frame,畫面感覺不流暢。
Android規定每秒鐘60個繪圖循環或是稱呼為每秒視框數(frame per second, fps),每個frame需在16ms內完成。超過16ms,系統會發出ANR警告。
為了避免上面提到的drop frame問題或ANR,我們把複雜的code移到其他multi-thread執行(background thread),就不會發生main thread被長期blocked佔用,也降低drop frame的發生率。
避免ANR,應該在背景執行緒(thread)上處理長期執行的任務,包括:
- 網路通訊
- 讀寫檔案
- 建立、刪除、更新資料庫
- 讀寫SharedPreference
- 圖像處理
- Context分析
為了減輕UI Thread的負擔,而使用Worked Thread(Backound Thread)的方法有?
- AsyncTask: 為UI thread與worker thread之間進行快速切換所提供一種簡單便捷的機制。適用於當下立即需要啟動,但是異步執行的生命週期短暫的使用場景。
- HandlerThread: 為某些callback method或者等待某些任務的執行設置一個專屬的thread,並提供thread task的調度機制。
- ThreadPool: 把task分解成不同的單元,分發到各個不同的thread上,進行concurrent 處理。
- IntentService: 適合於執行由UI觸發的Background Service Task,並可以把Background Task執行的情況通過一定的機制反饋給UI。
ref: