Android 關於過度繪製的那些事兒 UI流暢度優化

檢測方法

1.開發者選項 - 調試過度繪製

顏色說明
1.原色 – 沒有被過度繪製 – 這部分的像素點只在屏幕上繪製了一次。
2.藍色 – 1次過度繪製– 這部分的像素點只在屏幕上繪製了兩次。
3.綠色 – 2次過度繪製 – 這部分的像素點只在屏幕上繪製了三次。
4.粉色 – 3次過度繪製 – 這部分的像素點只在屏幕上繪製了四次。
5.紅色 – 4次過度繪製 – 這部分的像素點只在屏幕上繪製了五次。

ps:「開發者選項」裏面的「顯示GPU視圖更新」也是個好東西。
比如可以用來觀察別人的代碼是調用了 RecyclerView 的 notifyItemChanged() 還是 notifyDataSetChanged()
pps:「開發者選項」裏面的「顯示佈局邊界」也是個好東西。
可以用來觀察 Android 的某個頁面是H5還是原生的。



2.Hierarchy View

在這裏插入圖片描述
很直觀的展示了佈局層級結構。
所以遇到複雜的佈局頁面,多使用 RelativeLayout。不管用的話再考慮用 ConstraintLayout。減少佈局層次妥妥的。

軟件在Android studio下已經找不到打開路徑了,目測已經被廢棄了。這個軟件在sdk的這個目錄下打開,叫做monitor
在這裏插入圖片描述

ps:mac版本的monitor很坑,試了「jdk1.8.0_201.jdk」和「jdk1.8.0_211.jdk」都不行。網上找了一下解決方案,說只認「jdk1.8.0_144.jdk」。果然如此。我每次使用還得切換 java 環境!
在這裏插入圖片描述



3.Layout Inspector

在 Android studio 的 Tools 菜單欄下
在這裏插入圖片描述
老樣子我們只需要觀察 id/content 以下的佈局就行。


解決辦法

詳細案例講解是沒有的,這懶我偷了。記錄自己幾條經驗。
1.自定義 View 的 onDraw 方法裏,減少在 onDraw 方法裏新建對象,比如說 Paint 對象。把能從變量抽取成屬性的對象都抽取了。
2.onDraw 方法裏的 clipPath 和 clipRect 這一套要會用。
3.遇到複雜的佈局頁面,多使用 RelativeLayout。不管用的話再考慮用 ConstraintLayout。
4.考慮使用 merge 替代 include
5.考慮 ViewStub
6.佈局背景要儘量少設置,比如Fragment已經設置了background了,Activity就可以考慮不用設置了。
7.學習使用 AsyncLayoutInflater

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章