Android Note - 佈局優化

這篇總結一下佈局優化,內容很少。。ide

屏幕刷新機制

首先了解一下刷新率的概念。刷新率 Refresh Rate,表明了屏幕在一秒內刷新屏幕的次數。刷新率跟屏幕硬件有關,即特定的屏幕只會有特定刷新率。好比通常電子設備刷新率爲60HZ。佈局

而後是幀率的概念。幀率 Frame Rate,表明了GPU在一秒內操做的屏幕的次數,例如60fps,表示GPU在一秒內對屏幕進行了60次渲染。性能

Android就是經過VSYNC信號來同步UI繪製和動畫,使得它們能夠得到一個達到60fps的固定的幀率。若是刷新率跟幀率不一致(通常是幀率小於刷新率)就會出現卡頓。優化

在上面提到了幀率爲60fps。爲何是這個數呢,這是由於人眼與大腦之間的協做沒法感知超過60fps的畫面更新,通常到了60fps,人腦就會認爲至關流暢了。因此通常就是60fps。動畫

爲了可以使得APP流暢,咱們須要在每一幀之內完成全部的CPU與GPU計算,繪製,渲染等等操做。而一幀在60fps下對應的時間爲 1000ms / 60 ≈ 16.6ms,因此這就是 16ms這個數字的由來。設計

優化方案

具體到佈局上,優化的核心無非就是減小嵌套,避免過分繪製代碼規範

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

其實使用「避免」這個詞也不太穩當,畢竟每一種佈局都有其存在的意義。可是 LinearLayout 這個佈局確實使用起來侷限性挺大。它只適合那種簡單的行或者列的排布,稍微複雜一點的佈局使用 LinearLayout 的話,嵌套層級簡直慘不忍睹。複雜一點的佈局使用RelativeLayout 或者 ConstraintLayout 是比較好的選擇。code

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

使用抽象佈局標籤

抽象佈局標籤,指的是 include merge ViewStub 這幾個標籤。你們也已經很熟悉了,其做用就是複用佈局,減小嵌套,延遲加載,總之也是幫助優化佈局。使用方法就不贅述了,網上介紹不少,本身試試就知道了。同步

避免在每一個佈局上都添加背景

咱們佈局的時候,每每喜歡順手給佈局添加一個背景。雖然這樣作能夠保證你的佈局任什麼時候候都和設計稿同樣,可是這樣特別影響性能。親身經歷,某頁面很是卡頓,去掉了多餘的 background,就流暢不少。因此,請去掉沒必要要的 background。 你能夠Activity 定義一個Theme ,經過Theme定義背景

使用LinearLayoutCompat繪製分隔線

以前繪製線性佈局的時候,每每須要給每一項之間繪製一個分隔線,咱們每每都是直接加一個ViewLinearLayoutCompat 帶有一個 divider 屬性,使用它就能夠在佈局中生成分隔線了。

這點是我在網上找到的,本身試了下,發現不生效。有多是個人用法不太對吧。不過如今佈局通常都用 ConstraintLayout 了,這個佈局用到的場景也很少。

多使用Lint檢查代碼

這個就不用說了,跑一遍仍是能發現蠻多問題的。關於佈局的問題,主要集中在 Android -> Lint -> Performance 目錄下,裏邊提到的問題要優先解決。另外,阿里代碼規範也會檢測出一些不規範的問題,也要注意一下。

相關文章
相關標籤/搜索