Android布局優化

2021-08-16 07:34:04 字數 2296 閱讀 5815

安卓效能優化的內容很多,但是做起來其實就和擠牙膏一樣。說道布局優化,首先我們要理解圖形是如何被渲染到螢幕上的。這裡借鑑大佬的圖:

其實cpu也可以用來做圖形顯示,但是為什麼又需要專門的gpu呢?簡單來說cpu作為**處理器任務很多,對於複雜圖形的計算速度跟不上需求,要單獨依賴cpu會大大加大成本,所以gpu單獨做圖形處理。

所以cpu將記憶體中的向量圖形丟個gpu,由gpu柵格化來顯示。那為什麼有時候手機會感覺卡頓呢?看下面這個 圖

如果一幀畫面處理時間太長,系統就會丟掉一幀,那麼前一幀的畫面就會停留更久,給人卡頓的感覺。那麼我們優化的目標就很明確了。

1、gpu 減少重複繪製的

2、cpu 減少 xml 轉換成物件的時間

一、減少gpu的過度繪製

手機上的過渡繪製檢視在開發者選項中開啟:

(1)、背景顏色

開發專案的時候,繼承的主題都有預設的背景顏色,而基本上每個頁面都有自己的背景顏色,很多時候都沒有去管這個,導致無形中多渲染了一次背景。這裡我建議將主題的背景色去掉,每個頁面單獨設定背景。

@null

item>

當然不止主題背景色,應該是在頁面中如果背景色想同,滿足業務需求的情況下都應該去掉,不然就加大了過渡繪製的可能性。

(2)、自定義控制項的繪製

這裡就看實際的情況了,只需要注意乙個點,看不見的就不用繪製了,活用canvas.clip()來進行優化。

二、cpu 減少 xml 轉換成物件的時間

其實說白了就是減少布局層次的巢狀,這裡注意兩個工具的使用。在android studio裡:

(1)布局層次工具

這樣就可以看到布局巢狀的層次,點那個彩色的按鈕可以顯示出來各個控制項measure ,layout,draw的時間。

綠: 表示該view的此項效能比該view tree中超過50%的view都要快;例如,代表measure的是綠點,意味著這個檢視的測量時間快於樹中的檢視物件的50%。

黃: 表示該view的此項效能比該view tree中超過50%的view都要慢;

紅: 表示該view的此項效能是view tree中最慢的。

通過這兩個工具可以很清楚看到布局的層次,下面就具體說一下優化布局。

(2) 布局層次優化

1.去掉無意義的巢狀

我們開發中經常會出現沒有必要的巢狀,比如乙個framlayout巢狀乙個framlayout,這樣完全可以去掉的viewgroup盡量去掉。hierarchy view工具中我就可以清楚發現這樣巢狀的布局,便於處理。

2.盡量使用較輕量級的父布局

使用優先framlayout>linearlayout>relativelayout。但是有時候會碰到使用linearlayout導致巢狀層次過深,這時候就可以使用乙個relativelayout來進行代替,或者直接自定義乙個viewgroup來進行優化。

3.活用include、merge與viewstub

使用include+merge組合來減少布局巢狀,使用viewstub來減少資源占用。

對於viewstub的控制項:

不可見,不用占用資源,只有設定viewstub為visible、invisible或者呼叫其inflater()方法時,其對應的布局檔案才會被初始化。侷限是viewstub的引用物件需要是乙個布局layout檔案,如果要是單個的view的話,viewstub就不合適了。

Android布局優化

android布局一般是xml布局,然後呼叫setcontentview 方法,雖然這個呼叫很簡單,讓我們具體看一下setcontentview 方法的具體工作步驟 1 android讀取應用的資源資料 apk檔案內,儲存在內部儲存器或sd卡中 2 解析資源資料,展開布局 3 布局展開成為activ...

android 布局優化

主要用到三個標籤。1 include 用於重複使用某個布局,減少 的重複。2 merge 用於減少布局的巢狀的層數。當父布局與子布局的根節點使用的是相同的布局,並且用include來包括進父布局中。那麼這個時候可以使用merge來替代掉原來的自布局的根節點。舉個栗子 xmlns android an...

Android布局優化

布局優化,系統在渲染ui介面的時候將消耗大量的資源,乙個好的ui不僅具有良好的視覺效果,更應該具有良好的使用體驗,因此布局優化就顯得非常重要。1 android ui渲染機制 人眼所感覺的流暢畫面,需要畫面的幀數達到40幀每秒到60幀每秒,相信玩兒過pc遊戲的朋友應該對幀數的概念非常清楚,最賤fps...