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

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

屏幕刷新機(jī)制

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

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

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

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

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

優(yōu)化方案

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

使用相對(duì)布局或者約束布局,避免使用線性布局

其實(shí)使用“避免”這個(gè)詞也不太妥當(dāng)奢赂,畢竟每一種布局都有其存在的意義陪白。但是 LinearLayout 這個(gè)布局確實(shí)使用起來(lái)局限性挺大。它只適合那種簡(jiǎn)單的行或者列的排布膳灶,稍微復(fù)雜一點(diǎn)的布局使用 LinearLayout 的話咱士,嵌套層級(jí)簡(jiǎn)直慘不忍睹。復(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)歷,某頁(yè)面非郴云郑卡頓弄抬,去掉了多余的 background,就流暢很多宪郊。所以掂恕,請(qǐng)去掉不必要的 background。 你可以Activity 定義一個(gè)Theme 弛槐,通過(guò)Theme定義背景懊亡。

使用LinearLayoutCompat繪制分隔線

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

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

多使用Lint檢查代碼

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末青瀑,一起剝皮案震驚了整個(gè)濱河市璧亮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斥难,老刑警劉巖枝嘶,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哑诊,居然都是意外死亡群扶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)竞阐,“玉大人缴饭,你說(shuō)我怎么就攤上這事∧俨耍” “怎么了茴扁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汪疮。 經(jīng)常有香客問(wèn)我峭火,道長(zhǎng),這世上最難降的妖魔是什么智嚷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任卖丸,我火速辦了婚禮,結(jié)果婚禮上盏道,老公的妹妹穿的比我還像新娘稍浆。我一直安慰自己,他們只是感情好猜嘱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布衅枫。 她就那樣靜靜地躺著,像睡著了一般朗伶。 火紅的嫁衣襯著肌膚如雪弦撩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天论皆,我揣著相機(jī)與錄音益楼,去河邊找鬼。 笑死点晴,一個(gè)胖子當(dāng)著我的面吹牛感凤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粒督,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陪竿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坠陈?” 一聲冷哼從身側(cè)響起萨惑,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仇矾,沒(méi)想到半個(gè)月后庸蔼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贮匕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年姐仅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掏膏,死狀恐怖劳翰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馒疹,我是刑警寧澤佳簸,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站颖变,受9級(jí)特大地震影響生均,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腥刹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一马胧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衔峰,春花似錦佩脊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至穴肘,卻和暖如春抱冷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梢褐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赵讯,地道東北人盈咳。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像边翼,于是被迫代替她去往敵國(guó)和親鱼响。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

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