非同步更新UI的四種方法和Handler淺分析

2021-09-16 14:09:11 字數 1860 閱讀 2183

通過結合handler與message可簡單有效地實現執行緒之間的通訊。

傳遞訊息的步驟主要有4步:

在主線程構造乙個handler物件,並啟動分執行緒

關鍵**

handler handler=new handler();

}}`

在分執行緒中構造乙個message物件的訊息包

message是多執行緒通訊中存放訊息的包裹,作用類似有intent機制的bundle工具。例項可通過的obtain方法 獲得,也可以通過handler物件的obtianmessage方法獲得。

public static message obtian(handler h,int what,int arg1,int arg2,object obj)
引數說明

3.在分執行緒中通過handler物件將message訊息發出去

處理器handler的訊息傳送操作主要是各類send方法

4主線程中handler對想處理接受到的訊息

主線程處理分執行緒發出的訊息需要實現handler物件的handlemessage方法,根據message的訊息具體內容分別進行相應處理。

所以可以用來作為更新ui的一種方法

更新ui的操作只能在onpostexecute(string result)方法中

runonuithread(new runnable)
主要的業務邏輯**在runonuithread

主要**

handler handler = new handler();

handler.post(new runnable){}

解釋下handler機制

handler有這樣三個特點:

1.允許你去傳送並處理一條與runnable物件和messagequeue相關聯的訊息

2.每個handler例項都與乙個單獨的執行緒和該執行緒的messagequeue相關

3.當你建立乙個新的處理程式是,它將繫結到正在建立的執行緒的執行緒/訊息佇列

構造方法:如果要對傳送的訊息進行操作則需要覆寫handlemessage方法

handler handler = new handler()

}

呼叫函式:post(runnable r)將runnable新增到messagequeue中。如果傳送的是runnable則忽略掉handlemessage方法的執行。

handler常用類,四個組成部分

1.message 訊息,被傳遞和處理的資料

public static message obtian(handler h,int what,int arg1,int arg2,object obj)

2.messagequeue:訊息佇列,本質是乙個資料結構,用來存放handler傳送過來的訊息,按照先進先出執行。

3.handler處理者,負責message的傳送及處理。

4.looper:迴圈器,不斷從messagequeue中抽取message。

5.thread:執行緒,負責排程整個訊息迴圈。

在非主線程中建立handler

a.手動進行looper.prepare()及looper.loop()、looper.mylooper().quit();

b.利用handlerthread類進行建立。handlerthread繼承thread,它會啟動乙個帶looper的新執行緒,但是必須要呼叫start()方法。

android多執行緒的四大元件

按照使用頻率又少到高

子執行緒更新UI的四種方法

mtvcontent findviewbyid r.id.tv content new thread start mtvcontent findviewbyid r.id.tv content new thread start private handler handler newhandler r...

Android 四種非同步操作UI介面的方法

android 四種非同步操作ui介面的方法 對於android 非同步操作在應用中使用率非常高,使用是開戶另一線程,主線程 ui 不能長時間等待,而其它執行緒中是不能操作ui的,方法1 handler 子執行緒呼叫handler的sendmessage message 傳送事件。handler h...

Android 四種非同步操作UI介面的方法

android 四種非同步操作ui介面的方法 對於android 非同步操作在應用中使用率非常高,使用是開戶另一線程,主線程 ui 不能長時間等待,而其它執行緒中是不能操作ui的,方法1 handler 子執行緒呼叫handler的sendmessage message 傳送事件。handler h...