handler機制整理
目錄介紹
1.關於handler訊息機制圖
2.關於handler基本介紹
3.使用handler的幾種方法
4.關於handler底層原始碼解讀
1.關於handler訊息機制圖
2.關於handler機制基本解讀
message
訊息,其中包含了訊息id,訊息處理物件以及處理的資料等,由messagequeue統一列隊,終由handler處理。
handler處理者,負責message的傳送及處理。使用handler時,需要實現handlemessage(message msg)方法來對特定的message進行處理,例如更新ui等。sendmessage(message); //傳送訊息
sendemptymessage(0); //其實內部實現還是和上面一樣
endemptymessageattime(int what, long uptimemillis); //定時傳送空訊息
sendemptymessagedelayed(int what, long delaymillis); //延時傳送空訊息
sendmessageattime(message msg, long uptimemillis); //定時傳送訊息
sendmessagedelayed(message msg, long delaymillis); //延時傳送訊息
sendmessageatfrontofqueue(message msg); //最先處理訊息(慎用)
messagequeue
訊息佇列,用來存放handler傳送過來的訊息,並按照fifo規則執行。當然,存放message並非實際意義的儲存,而是將message以鍊錶的方式串聯起來的,等待looper的抽取。
把訊息進行排序,排序的依據就是訊息要執行的時間
looper
訊息幫浦,不斷地從messagequeue中抽取message執行。通過looper去訊息佇列取訊息
當主線程建立的時候,就會建立乙個looper,looper在new的時候會建立乙個messagequeue 。所以,乙個執行緒對應乙個looper乙個looper對應乙個messagequeue
looper建立之後必須呼叫loop方法,loop方法中有乙個死迴圈,這個死迴圈會不斷去訊息佇列裡取訊息,取出訊息之後就會呼叫handler的handlemessage方法處理訊息
thread
執行緒,負責排程整個訊息迴圈,即訊息迴圈的執行場所。
3.使用handler的幾種方法
1.1主線程中定義handler,子執行緒中發訊息,通知handler完成ui更新
handler物件必須定義在主線程中,如果是多個類直接互相呼叫,就不是很方便,需要傳遞content物件或通過介面呼叫
在主線程中
主線程接收訊息處理操作
private handler myhandler = new handler() }};
2.1用activity物件的runonuithread方法更新//開啟乙個子執行緒,子執行緒傳送資訊
new thread(
new runnable() else
if(a==2)else
if(a==3)else
if(a==4)}}
).start();
4.關於handler底層原始碼解讀new thread()
});
} }.start();
如果在非上下文類中(activity),可以通過傳遞上下文實現呼叫;
activity activity = (activity) imageview.getcontext();
activity.runonuithread(new runnable()
handler機制原理全面整理
1 handler用的最多是子執行緒傳送訊息到主線程修改ui 2 首先通過message中的obtain 從訊息池中獲取訊息物件 3 然後要建立handler物件,在handler的構造方法中就會得到輪詢器looper和訊息佇列,這個looper物件和訊息佇列是主線程建立的時候建立的,輪詢器就不斷的...
handler通訊機制
android應用開發有個預設規則,不在ui執行緒做耗時操作。耗時操作結果反饋給使用者也不能直接更新ui。耗時操作必須開子執行緒去做,實現的方式很多,handler asynctask service。每個人偏好不同,但是各有各的優點,根據不同的需求選擇適當的實現方式,是我一直追求的目標,每一種至少...
Handler機制概要
簡而言之,每個thread裡面有looper 通過prepare初始化,通過loop進入死迴圈 每個handler將自己的msg放入looper死迴圈裡面,然後looper迴圈檢測訊息再傳送回給handler。記憶體洩漏問題 這裡需要注意乙個記憶體洩漏問題,就是當activity退出的時候會出現記憶...