引用:
一、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是多執行緒通訊中存放訊息的...