You are here Android > 开发者 > 开发讨论 > 活用Android的Message Queue(1)zt

机器人


95.805%

disconnected
登录后回复主题 | 跳到回复

活用Android的Message Queue(1)zt

... by 机器人 ... 20 月 6 天前 ... 116 次点击

By 高煥堂






??
1.
Message Queue的角色


l
在你的Android程式裡,新誕生一個線程,或稱執行緒(Thread)時,並不會自動建立其Message Loop。
l
Android裡並沒有Global的Message Queue資料結構,例如,不同APK裡的物件不能透過Massage Queue來交換訊息(Message)。
l
一個線程可以誕生一個Looper之物件,由它來管理此線程裡的Message Queue。
l
你可以誕生Handler之物件來與Looper溝通,以便push新訊息到Message Queue裡;或者接收Looper(從Message Queue取出)所送來的訊息。
l
線程A的Handler物件參考可以傳遞給別的線程,讓別的線程B或C等能送訊息來給線程A(存於A的Message Queue裡)。
l
線程A的Message Queue裡的訊息,只有線程A所屬的物件可以處理之。
l
使用Looper.myLooper可以取得目前線程的Looper物件參考值。
l
使用mHandler = new EevntHandler(Looper.myLooper()); 可誕生用來處理目前線程的Handler物件;其中,EevntHandler是Handler的子類別。
l
使用mHandler = new EevntHandler(Looper.getMainLooper()); 可誕生用來處理main線程的Handler物件;其中,EevntHandler是Handler的子類別。

2. 範例之一:Looper物件之角色


Looper類別用來管理特定線程內物件之間的訊息交換(Message Exchange)。你的應用程式可以誕生許多個線程,或稱執行緒(Thread)。而一個線程可以誕生許多個物件,這些物件之間常常需要互相交換訊息。如果有這種需要,您可以替線程誕生一個Looper類別之物件,來擔任訊息交換的管理工作。Looper物件會建立一個MessageQueue資料結構來存放各物件傳來的訊息(包括UI事件或System事件等)。如下圖:







每一個線程(Thread,或稱「執行緒」)裡可含有一個Looper物件以及一個MessageQueue資料結構。在你的應用程式裡,可以定義Handler的子類別來接收Looper所送出的訊息。

目前这个主题还没有回复,或许你可以帮楼主加盖一层?

在回复之前你需要先进行登录
电子邮件或昵称
密码
© 2009 A Nanshapo Production   -   About
a site powered by Project Babel