Android中的執行緒通訊

2021-07-08 12:55:12 字數 1652 閱讀 1777

在android系統中,可以依賴handler和message實現執行緒間的通訊,這種機制也被稱之為訊息機制

handler:用於傳送和處理message,在主線程中建立的handler預設是執行在主線程的,所以,使用handler可以控制各個控制項的顯示

message:訊息的載體

傳送訊息:使用handler物件的sendmessage(message msg)方法傳送訊息

接受訊息:不需要開發者考慮

處理訊息:自定義類繼承handler,並重寫public void handlemessage(message msg)方法,決定如何處理訊息

在訊息(message)中封裝資料:可以使用message的int arg1、int arg2、object obj屬性封裝資料

關於message物件

----------------------------------------

message類有公有的無引數的構造方法,開發者可以隨意建立message物件,但是,message物件大多是被處理後就沒有存在的意義了,所以反覆建立message物件會無謂的消耗記憶體

推薦使用message.obtain()方法獲取訊息的物件,message類自身使用了「message池」對訊息物件進行管理,從而可以控制產生的message物件的數量

如果使用的message.obtain()方法中,使用到了handler做為引數,則需要使用message物件的sendtotarget()傳送訊息,而不再使用handler的sendmessage()系列方法

message的what屬性用於標識訊息的型別(因為子執行緒可能向主線程傳送若干種不同的訊息),不應該用於封裝有具體數值含義的資料,通常,what屬性的值應該使用靜態常量表示,例如msg.what = message_update_clock;

通過handler物件的obtainmessage()系列方法也可以獲取message物件,其實現效果與message類的obtain()方法是等效的

關於handler.callback

----------------------------------------

使用handler.callback介面的實現類物件,做為handler構造方法的引數,也可以實現對訊息的處理【推薦】

handler.callback定義了public boolean handlemessage(message msg)方法,其中,返回值(boolean型別)表示「是否已經完全處理了訊息」,當返回值為false時,如果存在其它的訊息處理方法,則對應的**也會被執行,當返回值為true時,表示「已經完全處理了訊息」,則其它的處理訊息的**不會執行

關於處理訊息的方式

----------------------------------------

1) 使用message.obtain(handler h, runnable callback)中的runnable物件處理訊息

2) 使用handler.callback處理訊息

3) 重寫handler類的handlemessage()處理訊息

以上3種方式可以並存,優先順序為1 -> 2 -> 3

當存在第1種方式時,訊息將直接被處理,並且不會向後傳遞

當第2種方式存在時,其public boolean handlemessage(message msg)方法的返回值決定訊息是否向後傳遞

android 執行緒間的通訊

在android,執行緒分為有訊息迴圈的執行緒和沒有訊息迴圈的執行緒,有訊息迴圈的執行緒一般都會有乙個looper,這個是android 的新概念。我們的主線程 ui執行緒 就是乙個訊息迴圈的執行緒。針對這種訊息迴圈的機制,我們引入乙個新的機制handler,我們有訊息迴圈,就要往訊息迴圈裡面傳送相...

Android 執行緒中的通訊(一)練習

參考博文 dateformat formats and parses dates in a locale sensitive manner.formatting turns a date into a string,and parsing turns a string into a date.簡單就...

android執行緒間通訊

原文 1,通過handler機制.private void one new thread catch interruptedexception e message message new message message.what 123 message.obj 通過handler機制 handler...