Android UI性能優(yōu)化(渲染)

概述

谷歌05年初發(fā)布性能優(yōu)化典范,是的開發(fā)者學(xué)會(huì)如何去識(shí)別、診斷、解決安卓應(yīng)用開發(fā)中所存在的性能問(wèn)題。首當(dāng)其沖的便是渲染的性能優(yōu)化。

渲染機(jī)制

一般原生app開發(fā)時(shí),自定義view時(shí),因?yàn)椴季值膶哟芜^(guò)多,導(dǎo)致不必要的繪制,,或者因?yàn)閛nDraw等方法中有耗時(shí)的操作從而使的界面卡頓。
一般來(lái)說(shuō),安卓系統(tǒng)美16ms會(huì)發(fā)出一個(gè)信號(hào),觸發(fā)對(duì)ui進(jìn)行渲染,所以一旦操作超過(guò)了16ms酒會(huì)發(fā)生卡頓的現(xiàn)象。其主要原因就是系統(tǒng)發(fā)出信號(hào)時(shí),ui無(wú)法進(jìn)行渲染,還在進(jìn)行別的操作,那么就會(huì)導(dǎo)致丟幀的現(xiàn)象。在網(wǎng)上看了看,16ms的原因就是意味1000/60 hz,相當(dāng)于60fps,人眼感知的一般無(wú)法超過(guò)60fps。
所以,總的來(lái)說(shuō),安卓界面的卡頓原因就在于沒有必要的布局、invalidations失效以及Overdraw重新繪制屏幕。
主要是通過(guò):

  • 通過(guò)Hierarchy Viewer去檢測(cè)渲染效率,去除不必要的嵌套
  • 通過(guò)Show GPU Overdraw去檢測(cè)Overdraw,最終可以通過(guò)移除不必要的背景以及使用canvas.clipRect解決大多數(shù)問(wèn)題。

Overdraw檢測(cè)

安卓4.2里面,開發(fā)者選項(xiàng)菜單有Debug GPU Overdraw,或者以上的話在屏幕左下角會(huì)有一個(gè)計(jì)數(shù)展示屏幕overdraw的程度。
另一種方式則是在Debug GPU overdraw菜單里選擇“Show Overdraw areas”選項(xiàng)。選擇之后,會(huì)在app的不同區(qū)域覆蓋不同的顏色來(lái)表示overdraw的次數(shù)。比較屏幕上這些不同的顏色,可以快速方便的定位overdraw問(wèn)題:
白色:沒有overdraw 藍(lán)色:1x overdraw(屏幕繪制了2次) 綠色:2x overdraw 淺紅色:3x overdraw 深紅色:4x或者更多overdraw

總結(jié)通過(guò)減少view的數(shù)量活著去除重復(fù)繪制的view,app的渲染會(huì)更快。

Overdraw處理方案

移除不要的background

在正常的開發(fā)中,可以移除不必要的background,以減少繪制的程度。
如設(shè)置了主布局文件的背景顏色,就可以移除listview以及l(fā)istview的items中的一些background。
以及當(dāng)我們?cè)趌ayout中設(shè)置了背景色,activity的view中的背景就沒有必要了,可以調(diào)用getWindow().setBackgroundDrawable(null);設(shè)置。

使用clipRect

當(dāng)我們繪制了多個(gè)view的時(shí)候,如果每一個(gè)view并不需要完全繪制在屏幕上時(shí),我們就可以在onDraw方法中使用canvas.clipRect(0, 0, 0,0);方法

Hierarchy Viewer

安卓sdk中包含著歌工具,在android studio中tools下面的android下的android device monitor就能看到。Hierarchy Viewer可以很方便可視化的查看屏幕上套嵌view結(jié)構(gòu),是查看你的view結(jié)構(gòu)的實(shí)用工具。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容