Android性能優(yōu)化:布局渲染

索引

Android中的布局渲染,一般來(lái)說(shuō)是系統(tǒng)解析應(yīng)用的布局文件,到界面顯示出來(lái)的。這其中包含CPU和GPU的工作步驟,Android系統(tǒng)保持著每秒60幀的繪制,也就是當(dāng)我們應(yīng)用的繪制速度小于每秒60幀時(shí),用戶就可能感覺(jué)到卡頓,所以為了避免應(yīng)用的卡頓,也就需要知道布局文件從解析到繪制經(jīng)歷了哪些步驟

目錄

  1. Android布局渲染流程
  2. 常見(jiàn)的布局渲染優(yōu)化手段

1 Android布局渲染流程

1.1 CPU和GPU

CPU的可以做的任務(wù)包括:邏輯運(yùn)算,內(nèi)存管理,顯示操作


CPU.png

GPU


GPU.png
  • 黃色的 Control 為控制器,用于協(xié)調(diào)控制整個(gè) CPU 的運(yùn)行,包括取出指令、控制其他模塊的運(yùn)行等;
  • 綠色的 ALU ( Arithmetic Logic Unit )是算術(shù)邏輯單元,用于進(jìn)行數(shù)學(xué)、邏輯運(yùn)算;
  • 橙色的 Cache 和 DRAM 分別為緩存和 RAM ,用于存儲(chǔ)信息。

從結(jié)構(gòu)圖可以看出, CPU 的控制器較為復(fù)雜,而 ALU 數(shù)量較少。因此 CPU 擅長(zhǎng)各種復(fù)雜
的邏輯運(yùn)算,但不擅長(zhǎng)數(shù)學(xué)尤其是浮點(diǎn)運(yùn)算

1.2 從xml到顯示的過(guò)程

  1. xml文件中寫的View,通過(guò)LayoutInflater加載到內(nèi)存中,成為View對(duì)象
  2. View對(duì)象中包含各種屬性信息,經(jīng)過(guò)cpu是計(jì)算,處理成多維的向量圖形
  3. 矢量圖經(jīng)過(guò)GPU的柵格化,填充處理,然后再經(jīng)過(guò)GPU繪制,最后顯示到界面上


    顯示過(guò)程.png

Android 系統(tǒng)每隔 16ms 發(fā)出 VSYNC 信號(hào) (1000ms/60=16.66ms) ,觸發(fā)對(duì) UI 進(jìn)行渲染, 如果每次渲染都成功這樣就能夠達(dá)到流暢的畫面所需要的 60fps ,為了能夠?qū)崿F(xiàn) 60fps ,這意味著計(jì)算渲染的大多數(shù)操作都必須在 16ms 內(nèi)完成。

2 常見(jiàn)的布局渲染優(yōu)化手段

2.1 布局渲染和優(yōu)化

總的來(lái)說(shuō),Android系統(tǒng)渲染主要可以分為2步

  1. CPU將UI對(duì)象轉(zhuǎn)換為一系列多邊形和紋理
  2. 傳遞數(shù)據(jù)到GPU進(jìn)行顯示
    所以如果要對(duì)布局進(jìn)行優(yōu)化,可以分別CPU和GPU入手

2.2 優(yōu)化方式

  1. 減少CPU中xml轉(zhuǎn)換為對(duì)象的時(shí)間(布局簡(jiǎn)單化)
  2. 減少GPU重復(fù)繪制的時(shí)間(避免過(guò)度繪制)

2.2.1 過(guò)度繪制

1. 去掉無(wú)用的背景

可以在系統(tǒng)設(shè)置中打開布局邊界顯示,減少布局嵌套和去掉無(wú)用背景

2. 自定義控件,操作畫布(canvas)只畫有用的區(qū)域

//先保存畫布的狀態(tài)
canvas.save();
//第一步:裁剪需要繪制的可見(jiàn)區(qū)域(對(duì)于那些不可見(jiàn)或者被覆蓋的區(qū)域,就不需要繪制)
canvas.clipRect(left,top,right,bottom);
//第二步:繪制bitmap到指定區(qū)域(在bitmap比繪制區(qū)域大時(shí),就可以實(shí)現(xiàn)只繪制可見(jiàn)區(qū)域,而不繪制不可見(jiàn)區(qū)域,避免過(guò)度繪制)
canvas.drawBitmap(bitmap,startX,startY,paint);
//還原畫布
canvas.restore();

總結(jié)

Android布局渲染優(yōu)化還是比較簡(jiǎn)單的,只要注意減少布局的嵌套,然后盡量減少布局的復(fù)雜程度,一般來(lái)說(shuō)就可以了在這個(gè)過(guò)程中,可以靈活使用merger和include布局標(biāo)簽

布局優(yōu)化原則

  1. 減少不必要的布局嵌套
  2. 使用merger避免與復(fù)用器重疊

注:此文屬作者原創(chuàng),轉(zhuǎn)載請(qǐng)標(biāo)明出處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容