handler原始碼解析1
handler原始碼解析2
享元設計模式
記憶體復用,使用同一塊記憶體空間,bitmap,recycleview都有使用這種思想
在loop從訊息佇列中取出訊息並分發完後,並不會把訊息物件銷毀,而是通過msg.recycleunchecked()方法清空訊息放入訊息池進行**
這樣做可以避免反覆建立和銷毀msg物件,造成記憶體抖動和oom
建立訊息的時候使用obtain方法從記憶體中取,不用反覆申請記憶體空間
同步屏障
可以遮蔽同步訊息,來優先執行系統中重要的非同步訊息
命中if後,進入迴圈過濾掉同步訊息,而msg.target=null 的時候該訊息就是乙個同步屏障
例如螢幕重新整理,anr通知等重要訊息就可以優先通過這種方式執行
handlerthread
handlerthread是thread的子類,嚴格意義上來說就是乙個執行緒,只是它在自己的執行緒裡面幫我們建立了looper
handlerthread 存在的意義如下:
1) 方便使用:a. 方便初始化,b,方便獲取執行緒looper
2)保證了執行緒安全
我們在子執行緒中使用looper需要通過 looper.prepare() looper.loop()兩個步驟,而且還不能保證執行緒安全
看看handlerthread中的處理
在run方法裡面為我們封裝好了這兩個方法
兩個方法加了隱式鎖
1.可以有無數個
2.乙個,通過threadlocal來保證
3.內部類持有外部類的物件,而生命週期不一致。具體是msg.target持有了handler物件,而handler物件持有了外部類的activity物件,當activity銷毀時,msg沒有銷毀導致的記憶體洩漏
4.mlooper.prepare 和 mlooper.loop
5.呼叫quit,結束loop迴圈
6.synchronized鎖
obtain
8.anr是事件5s為響應,而looper休眠時因為沒得事件執行,兩者並沒有關聯
Handler原始碼解析2
handler原始碼解析1 handler原始碼解析2 享元設計模式 記憶體復用,使用同一塊記憶體空間,bitmap,recycleview都有使用這種思想 在loop從訊息佇列中取出訊息並分發完後,並不會把訊息物件銷毀,而是通過msg.recycleunchecked 方法清空訊息放入訊息池進行 ...
Handler原始碼解析
意思就是說 在沒有呼叫looper.prepare 之前不能在子執行緒建立handler。為什麼在主線程中我們就已經可以直接建立handler?因為在activity的啟動 中,已經在當前ui執行緒 主線程 呼叫了looper.preparemainlooper 和looper.loop 方法。我們...
Handler機制 Looper原始碼解析
安卓中handler框架處理訊息,其中looper類用來迴圈從messagequeue類中獲取訊息,然後呼叫handler進行消費.本文將基於安卓9.0 帶分析looper的實現.looper模擬較簡單,其主要類成員變數比較少.構造方法是私有的,一般會有靜態方法來常見例項.private loope...