我們都知道android的ui更新操作都是在主線程執行的,但是很多時候我們都需要在子執行緒
中執行一些費時的操作,以獲取我們所需要的變更資料。很多剛入門的同學都容易犯的乙個錯誤就是在子執行緒試圖去更新ui控制項,這樣做是被android禁止的,所以會出現崩潰的現象。
android的非同步資訊處理機制就是專門解決這個問題而誕生的。對於這個非同步機制我們只需要知道四個物件即可,即message,handler,looper,messagequeue。它們的功能分別如下:
message:故名思意就是訊息,這個訊息是可以攜帶物件的,我們可以通過message.what制定當前操作的型別,通過message.obj指定物件。
handler:我們一般初始化的方法如下:
handlerhandler
=newhandler() {
public
voidhandlemessage(android.os.message msg) {
objectobj=msg.obj;//一般儲存要傳遞的物件
intwhat=msg.what;//獲取到需要操作的型別
switch(what)
case0:break;//執行對應的操作
case1:break;
當我們需要傳送訊息時,可以這樣:
message msg=new message();
msg.obj=new object();
handler.sendmessge(msg);
整個訊息的傳遞過程稍後解釋。
messagequeue:是乙個訊息佇列,這裡邊存放了很多message,它們是以佇列的方式排列的。訊息會乙個乙個排在這裡邊。
looper:就像是乙個管家,他負責把messagequeue裡邊的message乙個乙個取出來,並傳遞給handler,呼叫handlemessage方法,就實現了乙個訊息的非同步傳遞。
整個過程是這樣的。在子執行緒中執行完資料的獲取操作,就給handler傳送訊息,此時,這個message會在messagequeue裡邊排隊,looper 檢測到有message就會取出來,喚醒handle的handlermessage方法,然後在這個方法裡邊就實現ui重新整理。整個過程就成功的從乙個子執行緒傳送乙個訊號到主線程,然後主線程實現ui更新。
Android非同步訊息處理機制
android 中的非同步訊息處理主要由四個部分組成,message handler messagequeue 和looper。1.message message message 的 what 字段,還可以使用 arg1 和 arg2 欄位來攜帶一些整型資料,使用 obj 字段攜帶乙個 object...
Android 解析非同步訊息處理機制
android中的非同步訊息處理主要由四部分組成,message handler messagequeue looper.1.message message是執行緒之間傳遞的訊息,它可以在內部攜帶少量的資訊,用於在不同執行緒之間交換資料。message有what欄位,除此以外,還可以使用arg1和a...
Android 解析非同步訊息處理機制
android中的非同步訊息處理主要有四個部分組成 message handle messagequeue和looper 1.message message是執行緒之間傳遞的訊息,它可以在內部攜帶少量的資訊,用於在不同執行緒之間交換資料 2.handler 主要用於傳送和處理訊息的。傳送訊息一般是使...