Android中View繪製優化

2021-09-06 15:20:51 字數 2338 閱讀 1038

1.優化布局層次

2.使用標籤復用布局檔案

<includelayout="@layout/titlebar"/>

關於標籤的第乙個比較簡單的用法

關於使用標籤的一些限制:

(1)它只能作為xml布局宣告的root元素來使用;

(2)使用它來inflate乙個布局時,必須指定乙個viewgroup例項作為其父元素並且設定attachtoroot屬性為true(參考 inflate(int, android.view.viewgroup, boolean)方法的說明 )。

使用標籤

當在布局檔案中復用另外的布局時, 標籤能夠在布局層次消除多餘的檢視元素。例如,如果你的

主布局檔案是乙個垂直地包含兩個view的linearlayout,該布局能夠復用在其他布局中,而對任意包含兩個view的

布局檔案都需要乙個root view(否則, 編譯器會提示錯誤)。然而,在該可復用性布局中新增乙個linearlayout

作為root view,將會導致乙個垂直的linearlayout包含另外的垂直linearlayout。內嵌地linearlayout只能減緩

ui效率,其他毫無用處可言。

為了避免冗餘的布局元素,你可以使用作為復用性布局檔案地root view 。例如:

使用標籤的布局檔案:

<mergexmlns:android="">   

<mergexmlns:android="">

現在,當你新增該布局檔案時(使用標籤),系統忽略< merge />節點並且直接新增兩個button去

取代節點。

優化布局層次

乙個通常的錯誤觀念就是使用基本的布局結構(例如:linearlayout、framelayout等)能夠在大多數情況下

產生高效率 的布局。 顯然,你的應用程式裡新增的每乙個控制項和每乙個布局都需要初始化、布局(layout)、

繪製 (drawing)。舉例來說:嵌入乙個linearlayout會產生乙個太深的布局層次。更嚴重的是,嵌入幾個使

用 layout_weight屬性的linearlayout 將會導致大量的開銷,因為每個子檢視都需要被測量兩次。這是反覆解析

1 、優化布局層次

同樣地,乙個複雜的網頁會延長載入時間,你的布局層次如果太複雜也能引發一些效率問題。本課程

告知你如何利用 sdk的工具去觀察你的布局以及發現布局過程的瓶頸問題。

2、使用標籤復用布局檔案

如果應用程式的ui在多處重複某些布局結構,本課程向你展示如何建立高效、可重用的布局結構,然後

以合適的 ui布局檔案包含它們。

3、按需載入view檢視

除了簡單地在另外的布局檔案中包括乙個布局元件,你可能想在需要的時候才將檢視顯現出來,有的時候

是在activity執行之後。本課程告訴你如何改進布局初始化行為---- 按需載入布局檔案的某個檢視。

4、如何使listview流暢滑動

如果你構建了乙個listview例項呈現那些包含複雜或者大容量資料的列表項,這可能會影響listview的流暢

滑動。本課程提供了一些如何讓滑動過程更加流暢的建議。

乙個好的實踐就是在你的布局檔案中使用lint工具去尋求可能優化布局層次的方法。lint已經取代了layoutopt

工具並且它提供了更強大的功能。一些lint規則如下:

1、使用組合控制項 --- 包含了乙個  imageview 以及乙個 textview 控制項的 linearlayout 如果能夠作為乙個

組合控制項將會被更有效的處理。

2、合併作為根節點的幀布局(framelayout)  ----如果乙個幀布局時布局檔案中的根節點,而且它沒有背景

或者padding等,更有效的方式是使用標籤替換該< framelayout />標籤 。

<3、無用的葉子節點----- 通常來說如果乙個布局控制項沒有子檢視或者背景,那麼該布局控制項時可以被移除

(由於它處於 invisible狀態)。

4、無用的父節點 -----  如果乙個父檢視即有子檢視,但沒有兄弟檢視節點,該檢視不是scrollview控制項或者

根節點,並且它沒有背景,也是可以被移除的,移除之後,該父檢視的所有子檢視都直接遷移至之前父檢視

的布局層次。同樣能夠使解析布局以及布局層次更有效。

5、過深的布局層次  ----內嵌過多的布局總是低效率地。考慮使用一些扁平的布局控制項,例如 relativelayout、

gridlayout ,來改善布局過程。預設最大的布局深度為10 。

android繪製view的過程

1 android繪製view的過程簡單描述 簡單描述可以解釋為 計算大小 measure 布局座標計算 layout 繪製到螢幕 draw 下面看看每一步的動作到底是什麼,第一步 當activity啟動的時候,觸發初始化view過程的是由window物件的decorview呼叫view 具體怎樣從...

Android效能調優 繪製優化

4.1 開發者中的 過渡繪製 檢測 4.2 開發者中的 gpu 檢測 5.1 布局優化 1.減少介面巢狀,對於負責的view可以使用constraintlayout 2.使用include復用布局 3.使用merge去除多餘層級 4.使用viewstub提高載入速度 按需才載入 顯示 5.減少不必要...

Android 獲取View繪製前的高度

在android開發過程中,我們可能需要獲取view繪製前的高度或者寬度,一種的可能情形是我們初始化的時候讓某個view是visible gone的,當我們觸發某個事件的時候需要它顯示並且希望有一些動畫效果。這時候我們就要獲取這個view顯示前即繪製前的寬度或者高度。原理很簡單,我們知道,view的...