2020-10-18

handler

(1)什么是Handler:?

?? 在平時的安卓開發(fā)過程中,Handler一定不少見,Handler是Android消息機制的上層接口,這使得在開發(fā)過程中只需要和Handler交互即可。很多人認為Handler的作用就是更新UI,的確沒錯,但是更新UI僅僅是Handler的一個特殊的使用場景。具體來說,就是有時候需要在子線程做一些耗時操作,比如說訪問網(wǎng)絡或者耗時的I/O操作,當這些耗時操作完成時,程序的UI進行相應的改變。由于安卓開發(fā)規(guī)范的限制,我們不能在子線程中訪問UI控件,因為UI的控件是線程非安全的,這個時候通過Handler就可以將更新UI的操作切換到主線程中執(zhí)行。下面我就通過代碼來演示Handler的基本用法。

(2)Handler有什么用?

Handler這個類就是管理某個線程(也可能是進程)的消息隊列,比如讓Handler處理主線程的消息隊列,這樣就可以將一些耗時任務放到其他線程之中,待任務完成之后就往主線程的消息隊列中添加一個消息,這樣Handler的Callback,即handleMessage就會被調(diào)用。但是Handler并不是線程安全的,因此官方文檔中建議將Handler作為一個靜態(tài)內(nèi)部類。

所以Handler只是處理消息,耗時任務放在其他線程。

Handler的使用主要是android中無法在主線程(即UI線程)中訪問網(wǎng)絡、無法在子線程中訪問UI線程元素。一般是在子線程中訪問網(wǎng)絡,然后使用Handler發(fā)送message通知主線程處理UI更新操作。


(3)Handler機制:


handler機制,在android中提供了一種異步回調(diào)機制Handler,使用它,我們可以在完成一個很長時間的任務后做出相應的通知。

(4)Handler四大重要的類:

Looper,Message,MessageQueen,Handler和一個線程

1.一個線程可以產(chǎn)生一個Looper對象,由他來管理線程里的MessageQueen(消息隊列)。

2.Handler你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message Queen里面,或者接受Looper從MessageQueen鎖取出來的消息。

3.MessageQueen(消息隊列),用來存放線程存放線程放入的消息。

4.Handler消息的封裝者和處理者,handler負責將需要傳遞的信息封裝成Message,通過調(diào)用handler對象的obtainMessage()來實現(xiàn);將消息傳遞給Looper,這是通過handler對象的sendMessage()來實現(xiàn)的。繼而由Looper將Message放入MessageQueue中。當Looper對象看到MessageQueue中含有Message,就將其廣播出去。該handler對象收到該消息后,調(diào)用相應的handler對象的handleMessage()方法對其進行處理。

5.線程,Ui thread通常就是mainThread,Android啟動程序時會替他建立一個MeassageQueen。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容