Android訊息處理機制(一)

2021-06-23 09:23:08 字數 2453 閱讀 6009

android 有一種叫訊息佇列的說法,這裡我們可以這樣理解:假如乙個隧道就是乙個訊息佇列,那麼裡面的每一部汽車就是乙個乙個訊息,這裡我們先忽略掉超車等種種因素,只那麼先進隧道的車將會先出,這個機制跟我們android 的訊息機制是一樣的。

一、角色描述

1.looper:(相當於隧道)乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的message queue(車隊,訊息隧道)。

2.handler:你可以構造handler物件來與looper溝通,以便push新訊息到message queue裡;或者接收looper(從message queue取出)所送來的訊息。

3. message queue(訊息佇列):用來存放執行緒放入的訊息。

4.執行緒:ui thread通常就是main thread,而android啟動程式時會替它建立乙個message queue。

每乙個執行緒裡可含有乙個looper物件以及乙個messagequeue資料結構。在你的應用程式裡,可以定義handler的子類別來接收looper所送出的訊息。

在你的android程式裡,新誕生乙個執行緒,或執行(thread)時,並不會自動建立其message loop。

android裡並沒有global的message queue資料結構,例如,不同apk裡的物件不能透過massage queue來交換訊息(message)。

例如:執行緒a的handler物件可以傳遞訊息給別的執行緒,讓別的執行緒b或c等能送訊息來給執行緒a(存於a的message queue裡)。

執行緒a的message queue裡的訊息,只有執行緒a所屬的物件可以處理。

使用looper.mylooper可以取得當前執行緒的looper物件。

使用mhandler = new eevnthandler(looper.mylooper());可用來構造當前執行緒的handler物件;其中,eevnthandler是自已實現的handler的子類別。

使用mhandler = new eevnthandler(looper.getmainlooper());可誕生用來處理main執行緒的handler物件;其中,eevnthandler是自已實現的handler的子類別。

二、舉例

1.  同執行緒內不同元件間的訊息傳遞

looper類用來管理特定執行緒內物件之間的訊息交換(message exchange)。你的應用程式可以產生許多個執行緒。而乙個執行緒可以有許多個元件,這些元件之間常常需要互相交換訊息。如果有這種需要,您可以替執行緒構造乙個looper物件,來擔任訊息交換的管理工作。looper物件會建立乙個messagequeue資料結構來存放各物件傳來的訊息(包括ui事件或system事件等)。

每乙個執行緒裡可含有乙個looper物件以及乙個messagequeue資料結構。在你的應用程式裡,可以定義handler的子類別來接收looper所送出的訊息。

同執行緒不同元件之間的訊息傳遞:

public

classactivity1extendsactivityimplementsonclicklistener

public 

voidonclick(view v)             

}     

private 

classmyhandlerextendshandler

@override

public 

voidhandlemessage(message msg)             }}

說明:此程式啟動時,當前執行緒(即主線程, main thread)已誕生了乙個looper物件,並且有了乙個messagequeue資料結構。

looper = looper.mylooper (); 

呼叫looper類別的靜態mylooper()函式,以取得目前執行緒裡的looper物件.

mhandler = new myhandler (looper);

構造乙個myhandler物件來與looper溝通。activity等物件可以藉由myhandler物件來將訊息傳給looper,然後放入messagequeue裡;myhandler物件也扮演listener的角色,可接收looper物件所送來的訊息。

message m = mhandler.obtainmessage(1, 1, 1, obj);

先構造乙個message物件,並將資料存入物件裡。

mhandler.sendmessage(m);

就透過mhandler物件而將訊息m傳給looper,然後放入messagequeue裡。

此時,looper物件看到messagequeue裡有訊息m,就將它廣播出去,mhandler物件接到此訊息時,會呼叫其handlemessage()函式來處理,於是輸出"this my message!"於畫面上,

android 訊息處理機制

首先還是推薦幾篇部落格 再來說說我的理解 訊息處理機制適用場景 比如 a 類中要控制ui介面類很多元件的屬性值,可以傳參,可以設定static,但這在有大量元件屬性值需要變化時就行不通了,這時可以運用訊息處理機制在 中通知ui介面類,在介面類中改變屬性值,並重新繪製ui.b 需要在另外的執行緒中改變...

Android訊息處理機制(一) 簡介

android應用程式的訊息處理機制是圍繞訊息佇列來實現的。每個執行緒最多有乙個訊息佇列,有了訊息佇列之後,就可以進入到乙個訊息迴圈中 進入loop中,每個執行緒最多有乙個looper物件,且主線程建立之後,系統會自動為其建立乙個looper物件和訊息佇列messagequeue 同時其他執行緒以及...

Android訊息處理機制 二

角色綜述 回顧 1 ui thread 通常就是main thread,而android啟動程式時會替它建立乙個messagequeue。2 當然需要乙個looper物件,來管理該messagequeue。3 我們可以構造handler物件來push新訊息到message queue裡 或者接收lo...