Android Note - 布局優(yōu)化

這篇總結(jié)一下布局優(yōu)化,內(nèi)容不多。。

屏幕刷新機(jī)制

首先了解一下刷新率的概念。刷新率 Refresh Rate,代表了屏幕在一秒內(nèi)刷新屏幕的次數(shù)。刷新率跟屏幕硬件有關(guān),即特定的屏幕只會有特定刷新率。比如一般電子設(shè)備刷新率為60HZ。

然后是幀率的概念。幀率 Frame Rate,代表了GPU在一秒內(nèi)操作的屏幕的次數(shù),例如60fps,表示GPU在一秒內(nèi)對屏幕進(jìn)行了60次渲染。

Android就是通過VSYNC信號來同步UI繪制和動畫,使得它們可以獲得一個(gè)達(dá)到60fps的固定的幀率。如果刷新率跟幀率不一致(一般是幀率小于刷新率)就會出現(xiàn)卡頓。

在上面提到了幀率為60fps。為什么是這個(gè)數(shù)呢,這是因?yàn)?strong>人眼與大腦之間的協(xié)作無法感知超過60fps的畫面更新,一般到了60fps,人腦就會認(rèn)為相當(dāng)流暢了。所以一般就是60fps。

為了能夠使得APP流暢,我們需要在每一幀以內(nèi)完成所有的CPU與GPU計(jì)算,繪制,渲染等等操作。而一幀在60fps下對應(yīng)的時(shí)間為 1000ms / 60 ≈ 16.6ms,所以這就是 16ms這個(gè)數(shù)字的由來。

優(yōu)化方案

具體到布局上,優(yōu)化的核心無非就是減少嵌套,避免過度繪制。

使用相對布局或者約束布局,避免使用線性布局

其實(shí)使用“避免”這個(gè)詞也不太妥當(dāng),畢竟每一種布局都有其存在的意義。但是 LinearLayout 這個(gè)布局確實(shí)使用起來局限性挺大。它只適合那種簡單的行或者列的排布,稍微復(fù)雜一點(diǎn)的布局使用 LinearLayout 的話,嵌套層級簡直慘不忍睹。復(fù)雜一點(diǎn)的布局使用RelativeLayout 或者 ConstraintLayout 是比較好的選擇。

尤其是 ConstraintLayout ,真的很好用,推薦。

使用抽象布局標(biāo)簽

抽象布局標(biāo)簽,指的是 include merge ViewStub 這幾個(gè)標(biāo)簽。大家也已經(jīng)很熟悉了,其作用就是復(fù)用布局,減少嵌套,延遲加載,總之也是幫助優(yōu)化布局。使用方法就不贅述了,網(wǎng)上介紹很多,自己試試就知道了。

避免在每個(gè)布局上都添加背景

我們布局的時(shí)候,往往喜歡順手給布局添加一個(gè)背景。雖然這樣做可以保證你的布局任何時(shí)候都和設(shè)計(jì)稿一樣,但是這樣特別影響性能。親身經(jīng)歷,某頁面非常卡頓,去掉了多余的 background,就流暢很多。所以,請去掉不必要的 background。 你可以Activity 定義一個(gè)Theme ,通過Theme定義背景。

使用LinearLayoutCompat繪制分隔線

之前繪制線性布局的時(shí)候,往往需要給每一項(xiàng)之間繪制一個(gè)分隔線,我們往往都是直接加一個(gè)View。LinearLayoutCompat 帶有一個(gè) divider 屬性,使用它就可以在布局中生成分隔線了。

這點(diǎn)是我在網(wǎng)上找到的,自己試了下,發(fā)現(xiàn)不生效。有可能是我的用法不太對吧。不過現(xiàn)在布局一般都用 ConstraintLayout 了,這個(gè)布局用到的場景也不多。

多使用Lint檢查代碼

這個(gè)就不用說了,跑一遍還是能發(fā)現(xiàn)蠻多問題的。關(guān)于布局的問題,主要集中在 Android -> Lint -> Performance 目錄下,里邊提到的問題要優(yōu)先解決。另外,阿里代碼規(guī)范也會檢測出一些不規(guī)范的問題,也要注意一下。

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

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

  • 界面是 Android 應(yīng)用中直接影響用戶體驗(yàn)最關(guān)鍵的部分。如果代碼實(shí)現(xiàn)得不好,界面容易發(fā)生卡頓且導(dǎo)致應(yīng)用占用...
    passiontim閱讀 1,933評論 0 8
  • 注:本文是我在 Android 界面性能調(diào)優(yōu)知識的系統(tǒng)性總結(jié),純屬個(gè)人碎碎念。秉持開源分享的原則發(fā)布本文出來,各位...
    東經(jīng)315度閱讀 802評論 0 8
  • 界面是 Android 應(yīng)用中直接影響用戶體驗(yàn)最關(guān)鍵的部分。如果代碼實(shí)現(xiàn)得不好,界面容易發(fā)生卡頓且導(dǎo)致應(yīng)用占用大量...
    Ten_Minutes閱讀 722評論 0 9
  • 2019/03/17日更DAY23 昨天沒有如約日更,深感慚愧… 剛剛打開,看到消息提醒,已經(jīng)自動使用復(fù)活卡了… ...
    卡薩布蘭卡_6c8f閱讀 220評論 0 0
  • 所有的結(jié)局,不管是好事還是壞事,在來臨之前,都有預(yù)兆,不管你是否有勇氣接受,它都會悄然而至,甚至給你迎頭痛擊,或者...
    大宣閱讀 179評論 0 0

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