關於Android消息機制中的另外一個類Handler,我在之前的兩篇文章中有做講解
handler message looper機制
handler message looper機制(二)
這裏再做下總結:
Handler處理消息的過程:
- 首先,檢查Message的callBack是否爲空,不爲空就讓HanderCallback來處理消息,這個callback是一個Runnable對象,也就是post方法中所傳遞的Runnable參數。handlerCallback中直接run這個對象,結束;通過Handler.post()發送消息就是走的這個流程msg.callback = runnable。
- 然後檢測mCallback是否爲空,不爲空就讓mCallback的handlerMessage來處理這個消息,結束。看下CallBack接口的定義
也就是我們每次new Handler(Callback);中實現測Callback接口。mCallback爲我們自己實現的接口,裏面會實現handlerMessage這個方法 - 如果這些都爲空,最後給Handler的handerMesage來處理消息,見圖中下面一個handleMessage方法。這就是我們最常用的new Handler(複寫handlerMessage方法),在複寫的方法中去處理。
此外,我們在平時還會遇到使用HandlerThread的情況,這種情況往往就是我們在子線程中去完成一些複雜的操作,然後在子線程中發送消息回到主線程中更新等等。通常這樣的情況我們需要在創建子Thread後手動Looper.prepare,Looper.loop()等操作。而HandlerThread會直接把這些完成,就像主線程也就默認產生並開啓一個Looper對象一樣。所以我們只需要下面這一步,就可以實例化一個子線程Handler