Android訊息處理機制 二

2021-06-16 16:04:02 字數 1204 閱讀 5172

角色綜述(回顧):

(1)ui thread 通常就是main thread,而android啟動程式時會替它建立乙個messagequeue。

(2)當然需要乙個looper物件,來管理該messagequeue。

(3)我們可以構造handler物件來push新訊息到message queue裡;或者接收looper(從message queue取出)所送來的訊息。

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

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

子執行緒傳遞訊息給主線程

public class activity2 extends activity implements onclicklistener

public void onclick(view v)

}

private class myhandler extends handler

@override

public void handlemessage(message msg)

}private class mythread extends threadelse

mhandler.removemessages(0);

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

mhandler.sendmessage(m);

}

}}

說明:android會自動替主線程建立message queue。在這個子執行緒裡並沒有建立message queue。所以,mylooper值為null,而mainlooper則指向主線程裡的looper。於是,執行到:

mhandler = new myhandler (mainlooper);

此mhandler屬於主線程。

mhandler.sendmessage(m);

就將m訊息存入到主線程的message queue裡。mainlooper看到message queue裡有訊息,就會作出處理,於是由主線程執行到mhandler的handlemessage()來處理訊息。

下一節將會寫乙個關於應多執行緒請求網路資料的例子。

android 訊息處理機制

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

Android訊息處理機制(一)

android 有一種叫訊息佇列的說法,這裡我們可以這樣理解 假如乙個隧道就是乙個訊息佇列,那麼裡面的每一部汽車就是乙個乙個訊息,這裡我們先忽略掉超車等種種因素,只那麼先進隧道的車將會先出,這個機制跟我們android 的訊息機制是一樣的。一 角色描述 1.looper 相當於隧道 乙個執行緒可以產...

android非同步訊息處理機制

我們都知道android的ui更新操作都是在主線程執行的,但是很多時候我們都需要在子執行緒 中執行一些費時的操作,以獲取我們所需要的變更資料。很多剛入門的同學都容易犯的乙個錯誤就是在子執行緒試圖去更新ui控制項,這樣做是被android禁止的,所以會出現崩潰的現象。android的非同步資訊處理機制...