handler 內部更新ui

2022-03-28 01:37:28 字數 1955 閱讀 3039

引用:

一、handler的定義:

主要接受子

執行緒傳送的資料, 並用此資料配合主線程更新ui.

解釋: 當應用程式啟動時,

android

首先會開啟乙個主線程 (也就是ui執行緒) , 主線程為管理介面中的ui

控制項,進行事件分發, 比如說, 你要是點選乙個 button ,android會分發事件到button上,來響應你的操作。  如果此時需要乙個耗時的操作,例如: 聯網讀取資料,    或者讀取本地較大的乙個檔案的時候,你不能把這些操作放在主線程中,,如果你放在主線程中的話,介面會出現假死現象, 如果5秒鐘還沒有完成的話,,會收到android系統的乙個錯誤提示  "強制關閉".  這個時候我們需要把這些耗時的操作,放在乙個子執行緒中,因為子執行緒涉及到ui更新,,android主線程是執行緒不

安全的,也就是說,更新ui只能在主線程中更新,子執行緒中操作是危險的. 這個時候,handler就出現了.,來解決這個複雜的問題 ,    由於handler執行在主線程中(ui執行緒中),  它與子執行緒可以通過message物件來傳遞資料, 這個時候,handler就承擔著接受子執行緒傳過來的(子執行緒用sedmessage()方法傳弟)message物件,(裡面包含資料)  , 把這些訊息放入主線程佇列中,配合主線程進行更新ui。

二、handler一些特點

handler可以分發message物件和runnable物件到主線程中, 每個handler例項,都會繫結到建立他的執行緒中(一般是位於主線程),

它有兩個作用: (1):  安排訊息或runnable 在某個主線程中某個地方執行, (2)安排乙個動作在不同的執行緒中執行

handler中分發訊息的一些方法

post(runnable)

postattime(runnable,long)

postdelayed(runnable long)

sendemptymessage(int)

sendmessage(message)

sendmessageattime(message,long)

sendmessagedelayed(message,long)

以上post類方法允許你排列乙個runnable物件到主線程佇列中,

sendmessage類方法, 允許你安排乙個帶資料的message物件到佇列中,等待更新.

三、handler例項

(1) 子類需要繼承hendler類,並重寫handlemessage(message msg) 方法, 用於接受執行緒資料

以下為乙個例項,它實現的功能為 : 通過執行緒修改介面button的內容

public class myhandleractivity extends activity

/*** 接受訊息,處理訊息 ,此handler會與當前主線程一塊執行

* */

class myhandler extends handler

public myhandler(looper l)

// 子類必須重寫此方法,接受資料

@override

public void handlemessage(message msg)

}class mythread implements runnable catch (interruptedexception e)

log.d("thread.......", "mthread........");

message msg = new message();

bundle b = new bundle();// 存放資料

b.putstring("color", "我的");

msg.setdata(b);

myhandleractivity.this.myhandler.sendmessage(msg); // 向handler傳送訊息,更新ui}}

}

android的Handler進行UI更新

handle處理不同執行緒之間的資料傳輸,每乙個執行緒建立後會與乙個looper關聯,looper管理message佇列的地方吧,handle是傳送message的運送東西,looper可以與多個handler關聯,在主線程中handler建立後會與主線程關聯,在子執行緒中通過 handler.se...

在非UI執行緒使用Handler

handler物件所繫結的執行緒並不取決於該handler物件由哪個執行緒構建,而是取決於該handler物件所繫結的looper屬於哪個執行緒。looper就像乙個訊息佇列 messagequeue 的管家,乙個訊息佇列只有乙個管家,並且管理者整個訊息佇列,而乙個訊息佇列內可以容納多個訊息 mes...

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

通過結合handler與message可簡單有效地實現執行緒之間的通訊。傳遞訊息的步驟主要有4步 在主線程構造乙個handler物件,並啟動分執行緒 關鍵 handler handler new handler 在分執行緒中構造乙個message物件的訊息包 message是多執行緒通訊中存放訊息的...