Android 的消息隊列模型 – Android移動開發技術文章_手機開發 Android移動開發教學課程

Android是參考Windows的消息循環機制來實現Android自身的消息循環的。
Android通過Looper、Handler來實現消息循環機制,Android消息循環是針對線程的(每個線程都可以有自己的消息隊列和消息循環)。
Android系統中,Looper負責管理線程的消息隊列和消息循環。我們可以通過Loop.myLooper()得到當前線程的Looper對象,通過Loop.getMainLooper()可以獲得當前進程的主線程的Looper對象。
一個線程可以存在(當然也可以不存在)一個消息隊列和一個消息循環(Looper)。
Activity是一個UI線程,運行於主線程中,Android系統在啟動的時候會為Activity創建一個消息隊列和消息循環(Looper)。
Handler的作用是把消息加入特定的(Looper)消息隊列中,並分發和處理該消息隊列中的消息。構造Handler的時候可以指定一個Looper對象,如果不指定則利用當前線程的Looper創建。
Activity、Looper、Handler,Thread的關系如下圖所示:


image


一個Activity中可以創建多個工作線程或者其他的組件,如果這些線程或者組件把他們的消息放入Activity的主線程消息隊列,那麼該消息就會在主線程中處理瞭。


因為主線程一般負責界面的更新操作,並且Android系統中的widget不是線程安全的,所以這種方式可以很好的實現Android界面更新。在Android系統中這種方式有著廣泛的運用。


那麼一個線程怎樣把消息放入主線程的消息隊列呢?答案是通過Handle對象,隻要Handler對象以主線程的Looper創建,那麼調用Handler的sendMessage等接口,將會把消息放入隊列都將是放入主線程的消息隊列。並且將會在Handler主線程中調用該handler的handleMessage接口來處理消息。


更多Android消息隊列的信息請參看: http://my.unix-center.net/~Simon_fu/?p=652


下面這個圖從另外一個角度描述瞭他們的關系:


image


參考資料:


Android異步加載圖像小結:/kf/201105/89970.html


深入理解Android消息處理系統——Looper、Handler、Thread:/kf/201105/89971.html


Android線程模型(Painless Threading) :/kf/201105/89972.html


android線程控制UI更新(Handler 、post()、postDelayed()、postAtTime)


/kf/201105/89973.html


Android – Multithreading in a UI environment
http://www.aviyehuda.com/2010/12/android-multithreading-in-a-ui-environment/


Android中的Handler, Looper, MessageQueue和Thread :/kf/201105/89903.html


Android Runnable :/kf/201105/89974.html

You May Also Like