搜尋此網誌

2011年8月17日

Handler / Looper / Message 的操作

Handler / Looper / Message 主要的目的,主要在 Main UI thread / Sub thread 之間交換tag (Messagewhat & obj),然後透過這個tag進行某些事情的處理,例如trigger一個動作,或者更新 Main UI

就我的認知做個簡單的定義:
l   Handler:
1.          Main thread / Sub thread都可以有Handler,但是只有Main threadHandler可以更新UI
2.          Handler透過obtainMessage() 打包Message送出
3.          Handler透過sendMessage() Message送給LooperLooper一收到sendMessage(),就去Message PoolMessage撈出來,然後Call backHandlerhandleMessage() 做處理。
l   Looper:
1.          Main thread / Sub thread都可以有Looper,但是預設只有Main threadcreateSub threadLooper要自己create (透過prepare)
2.          可以調用Main thread / Sub threadLooper,透過getMainLooper() or myLooper() 來調用。
l   Message Queue:
1.          Main thread / Sub thread都可以有Message queue,但是預設只有Main threadcreateSub thread的要自己create (透過prepare)
2.          Looper一旦建立了,相對應的Message queue就會產生。

Study大陸一些博客和高煥堂老師的文章後,發覺主要有四種應用模式:
1.          Main thread -> (Send msg) -> Main thread -> Handler(Main thread) -> (Display on Main UI)
2.          Main thread -> (Send msg) -> Sub thread -> Handler(Main thread) -> (Display on Main UI)
3.          Sub thread -> (Send msg) -> Main thread -> Handler(Main thread) -> (Display on Main UI)
4.          Sub thread -> (Send msg) -> Sub thread -> Handler(Main thread) -> (Display on Main UI)

整個過程就是在Main / SubHandler / Looper一直切換,而最終就是要靠Main threadHandler來更新UI畫面,這也是Android對於畫面處理的唯一定義,如果從Sub thread直接更新UI,就會出現Exception

Ref URL:

沒有留言:

張貼留言