【Android必問面試題】Android性能優(yōu)化之布局優(yōu)化

面試當(dāng)中一定會問的問題惭婿,你在項目當(dāng)中做了哪寫優(yōu)化箕昭?本章著重介紹我們在開發(fā)當(dāng)中對布局方面做的一些優(yōu)化項。

Android系統(tǒng)的屏幕存在著怎樣的刷新機制衣陶?

既然提到布局的優(yōu)化柄瑰,首先我就要了解Android系統(tǒng)是怎么刷新屏幕的顯示,我們都知道如果我們想要屏幕流暢的運行剪况,那么我們就要保證UI全部的測量(Measure)教沾,布局(Layout),繪制(draw)全部的耗時在16ms內(nèi)译断。那么為什么是16ms呢授翻?
這是因為人眼與大腦的協(xié)作無法感知超過每秒60幀的畫面更新,用1000除以60得到一個大約的時間就是16ms镐作。

在布局方面我們應(yīng)該遵守哪些優(yōu)先原則藏姐?

  • FrameLayout優(yōu)先選擇
  • RelativeLayout的選擇優(yōu)先性取決于布局是否復(fù)雜隆箩,RelativeLayout可以較簡單的實現(xiàn)LinearLayout需要嵌套才可以實現(xiàn)的布局该贾。
  • 當(dāng)RelativeLayoutLinearLayout可以同時滿足需求時,我們優(yōu)先選擇LinearLayout捌臊,因為RelativeLayout實現(xiàn)較為復(fù)雜杨蛋,會出現(xiàn)重復(fù)測量的情況。通過日志打印可以看到RelativeLayout經(jīng)常會出現(xiàn)對子View進行兩次的測量來確保子View被放在正確的位置上理澎。當(dāng)然如果LinearLayout添加了weight屬性的話逞力,也會對子View進行兩次測量,這里需要注意的是糠爬,如果出現(xiàn)多層嵌套的話寇荧,測量的次數(shù)會成指數(shù)增長。

布局當(dāng)中要避免Overdraw

什么是Overdraw执隧?

  • Overdraw是指屏幕上的某一個像素點在同一幀的時間繪制了多次揩抡。
    我們可以通過開發(fā)者模式中打開過度繪制的開關(guān)看到屏幕的繪制情況户侥,通常情況下我們通過四種顏色來展示不同程度的Overdraw情況。
  • 藍 1xOverdraw
  • 綠 2xOverdraw
  • 紅 3xOverdraw
  • 暗紅 4xOverdraw
    當(dāng)我們程序中出現(xiàn)大范圍的紅或者暗紅的時候我們就需要對我們的布局進行優(yōu)化峦嗤。

能通過ConstaintLayout完成的布局盡可能用此布局

ConstaintLayout屬于Android Studio 2.2的新特性蕊唐,它可以有效地解決布局嵌套過多的問題。

布局優(yōu)化中各種標(biāo)簽的使用

Android中為我們提供了三種布局的標(biāo)簽可以使用烁设,分別為include替梨,merge以及ViewStub

include

在一個布局中引入另一個布局装黑。如果多個頁面中有相同的布局副瀑,這樣可以將相同的部分提取出來,供各個layout使用恋谭,提高代碼的復(fù)用性俗扇。這里需要注意的是include標(biāo)簽中可以覆蓋引入的layout的跟布局的屬性,比如寬高的定義等箕别。

merge

merge標(biāo)簽的作用主要是減少布局的嵌套層次铜幽,優(yōu)化布局層級,提高布局的加載效率串稀。他可以看作是include標(biāo)簽的輔助以及拓展除抛,比如我們的布局跟布局是一個LinearLayoutinclude的布局文件中也是一個LinearLayout母截,且兩個布局都是垂直布局到忽,這是我們就可以將include布局文件中的跟布局改為merge,這樣就減少了LinearLayout的層級嵌套清寇,引入的方式就可以改為merge喘漏。

ViewStub

ViewStub只有在加載該布局的時候才會占用資源,不可見的狀態(tài)下不會對其進行繪制华烟。

一些原生View的優(yōu)化

最常問的就是ListView的優(yōu)化

  • 復(fù)用convertView翩迈,重復(fù)使用回收的view
  • 使用viewholder
  • 分頁加載數(shù)據(jù)

webview的優(yōu)化

  • 全局webview 提前啟動,減少webview首次啟動的耗時
  • 代理數(shù)據(jù)請求 通過native去向網(wǎng)絡(luò)請求數(shù)據(jù)盔夜,webview初始化之后從native去要數(shù)據(jù)负饲。
  • 優(yōu)化加載速度 設(shè)置webview禁止加載圖片,在初始化之后在進行圖片加載喂链。

文章主要介紹在面試中我們需要怎么回答返十,不做過深的探索,有興趣的同學(xué)可以自行研究一下椭微。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洞坑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蝇率,更是在濱河造成了極大的恐慌迟杂,老刑警劉巖匈仗,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逢慌,居然都是意外死亡悠轩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門攻泼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來火架,“玉大人,你說我怎么就攤上這事忙菠『渭Γ” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵牛欢,是天一觀的道長骡男。 經(jīng)常有香客問我,道長傍睹,這世上最難降的妖魔是什么隔盛? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拾稳,結(jié)果婚禮上吮炕,老公的妹妹穿的比我還像新娘。我一直安慰自己访得,他們只是感情好龙亲,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悍抑,像睡著了一般鳄炉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搜骡,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天拂盯,我揣著相機與錄音,去河邊找鬼浆兰。 笑死磕仅,一個胖子當(dāng)著我的面吹牛珊豹,可吹牛的內(nèi)容都是我干的簸呈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼店茶,長吁一口氣:“原來是場噩夢啊……” “哼蜕便!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贩幻,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤轿腺,失蹤者是張志新(化名)和其女友劉穎两嘴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族壳,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡憔辫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仿荆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贰您。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拢操,靈堂內(nèi)的尸體忽然破棺而出锦亦,到底是詐尸還是另有隱情,我是刑警寧澤令境,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布杠园,位于F島的核電站,受9級特大地震影響舔庶,放射性物質(zhì)發(fā)生泄漏抛蚁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一惕橙、第九天 我趴在偏房一處隱蔽的房頂上張望篮绿。 院中可真熱鬧,春花似錦吕漂、人聲如沸亲配。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼虎。三九已至,卻和暖如春苍鲜,著一層夾襖步出監(jiān)牢的瞬間思灰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工混滔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洒疚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓坯屿,卻偏偏與公主長得像油湖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子领跛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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