標題還沒想到要取什麼

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:

Android性能優化典範 - 第5季

Understanding Android\/Java Processes and Threads Related Concepts (Handlers, Runnables, Loopers, MessageQueue, HandlerThread)

Android中的Thread & HandlerThread & Handler

results matching ""

    No results matching ""