享元設計模式
記憶體復用,使用同一塊記憶體空間,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鎖
7. obtain
8.ANR是事件5s為回應,而looper休眠時因為沒得事件執行,兩者并沒有關聯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/230673.html
標籤:其他
上一篇:C語言編程>第二周 ③ 古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
