性能優(yōu)化--布局

一、布局優(yōu)化:

1偎血、過度繪制優(yōu)化:

屏幕上某一像素點在一幀中被重復繪制多次,就是過度繪制盯漂。

1)颇玷、查看自己應用的過度繪制情況:

方法一:通過開發(fā)者選項開啟GPU過度繪制調試?

Android手機的開發(fā)者選項中有『調試 GPU 過度繪制』的選項:

方法二:通過adb命令開啟GPU過度繪制調試?

當然,如果每次都進入系統(tǒng)設置嫌麻煩就缆,可以使用adb命令進行開啟和關閉:?

開啟『調試 GPU 過度繪制』:

adb shell setprop debug.hwui.overdrawshow

關閉『調試 GPU 過度繪制』:

adb shell setpropdebug.hwui.overdrawfalse

2)帖渠、顏色與過度繪制:

原色:沒有過度繪制

藍色:1 次過度繪制

綠色:2 次過度繪制

粉色:3 次過度繪制

紅色:4 次及以上過度繪制

在平時的開發(fā)中,如果出現(xiàn)粉色及以上的過度繪制情況竭宰。說明過度繪制以及很嚴重了空郊。需要進行優(yōu)化份招。

3)、常見的原因以及處理方法:

原因一:

布局文件過多的背景設置導致狞甚。

解決辦法:Activity自帶的默認背景顏色锁摔,可以在主題中設置好通用背景色,在各個布局文件中就不需要再次設置背景色哼审。如果某個Activity的

背景色與通用背景色不一致谐腰,則可以通過getWidow.setBackgroundDrawable()來設置,在布局文件中就不要重復設置了涩盾。同時布局文件內部盡量減少帶背景的View產生重疊區(qū)域

原因二:

自定義View某區(qū)域多次被繪制導致十气。

解決辦法:View最終顯示的顏色是最后一次繪制的顏色,不管之前繪制過什么春霍,所以重復繪制區(qū)域先前的繪制是沒有意義的砸西,要避免同一區(qū)域多次繪制的情況出現(xiàn)。

原因三:

布局重疊導致终畅。典型的例子籍胯,抽屜布局;抽屜打開的時候离福,抽屜布局和背后布局重疊在一起了杖狼,此時整個屏幕一多半都變成了紅色,過度繪制嚴重

解決辦法:

DrawerLayout類通過重寫drawChild方法妖爷,因為在所有孩子視圖繪制之前都會調用drawChild方法蝶涩,這里只需要對內容區(qū)域視圖做裁切,當繪制內容區(qū)域視圖時絮识,取得抽屜視圖的位置信息绿聘,如果抽屜視圖可見、背景為不透明次舌、抽屜高度和父布局高度一致時熄攘,取得抽屜視圖左、上彼念、右挪圾、下邊緣在canvas中的位置信息。接著進行裁切逐沙,將內容視圖未被擋住的部分區(qū)域裁切出來哲思,并把裁切完的canvas交由子View進行繪制,這樣吩案,內容區(qū)域只有在裁切后的區(qū)域才會繪制棚赔,其他區(qū)域不進行繪制。待子View繪制完之后,恢復Canvas到裁切之前的狀態(tài)靠益,因為一個Window下的所有View都使用的是同一個Canvas丧肴,所以需要恢復狀態(tài)給其他子View使用

2、布局層級優(yōu)化

為了能夠使得APP流暢捆毫,我們需要在每一幀16ms以內完成所有的CPU與GPU計算闪湾,繪制,渲染等等操作绩卤。也就是幀率為60fps途样,為什么幀率要為60fps呢,因為人眼與大腦之間的協(xié)作無法感知超過60fps的畫面更新濒憋。開發(fā)app的性能目標就是保持60fps何暇,這意味著每一幀你只有16ms=1000/60的時間來處理所有的任務。這里需要了解下刷新率和幀率:

Refresh Rate:代表了屏幕在一秒內刷新屏幕的次數(shù)凛驮,這取決于硬件的固定參數(shù)裆站,例如60HZ。

Frame Rate:代表了GPU在一秒內揮之操作的幀數(shù)黔夭,例如30fps宏胯,60fps。


1本姥、首先是善用相對布局Relativelayout

2肩袍、布局優(yōu)化的另外一種手段就是使用抽象布局標簽include、merge婚惫、ViewStub

3氛赐、Android最新的布局方式ConstaintLayout

4、利用Android Lint工具尋求可能優(yōu)化布局的層次

一些Lint規(guī)則如下:

  1先舷、使用組合控件: 包含了一個ImageView以及一個TextView控件的LinearLayout如果能夠作為一個組合控件將會被更有效的處理艰管。

????????2、合并作為根節(jié)點的幀布局(Framelayout) :如果一個幀布局時布局文件中的根節(jié)點蒋川,而且它沒有背景圖片或者padding等牲芋,更有效的方式是使用merge標簽替換該Framelayout標簽 。?

  3捺球、無用的葉子節(jié)點:通常來說如果一個布局控件沒有子視圖或者背景圖片街图,那么該布局控件時可以被移除(由于它處于 invisible狀態(tài))。

  4懒构、無用的父節(jié)點 :如果一個父視圖即有子視圖,但沒有兄弟視圖節(jié)點耘擂,該視圖不是ScrollView控件或者根節(jié)點胆剧,并且它沒有背景圖片,也是可以被移除的,移除之后秩霍,該父視圖的所有子視圖都直接遷移至之前父視圖的布局層次篙悯。同樣能夠使解析布局以及布局層次更有效。

  5铃绒、過深的布局層次:內嵌過多的布局總是低效率地鸽照。考慮使用一些扁平的布局控件颠悬,例如 RelativeLayout矮燎、GridLayout ,來改善布局過程赔癌。默認最大的布局深度為10 诞外。


3、布局調優(yōu)工具

(1) hierarchy['ha??rɑrki] viewer?

hierarchy viewer可以方便的查看Activity的布局灾票,各個View的屬性峡谊、measure、layout刊苍、draw的時間既们,如果耗時較多會用紅色標記,否則顯示綠色正什。?

Hierarchy Viewer是隨Android SDK發(fā)布的工具啥纸,位于Android SDK/tools/hierarchyviewer.bat (Windows操作系統(tǒng),mac上顯示的為hierarchyviewer)埠忘,使用起來也是超級簡單脾拆,通過此工具可以詳細的理解當前界面的控件布局以及某個控件的屬性(name、id莹妒、height等)名船。?

1)連接設備真機或者模擬器?

2)啟動你要觀察的應用。?

3)打開Hierarchyviewer旨怠,點擊hierarchyviewer文件即可渠驼。

View Hierarcy 同時能幫助你識別渲染性能比較低的部分。View節(jié)點中帶有紅色或黃色的點代表速度較慢的View對象鉴腻。如單步運行應用程序那樣迷扇,你可以這樣來判斷某個View 速度一直很慢,還是只在某個特定環(huán)境下速度才慢爽哎。?

請注意蜓席,低性能并不表示一定有問題,特別像是ViewGroup對象课锌,View的子節(jié)點越多厨内,結構越復雜祈秕,性能越差。?

View Hierarchy 窗口還可以幫助你找到性能問題雏胃。只要看每個View節(jié)點的性能指標(顏色點)就可以请毛,你可以看到測量(布局或繪制)最慢的View對象是哪個,這樣你就能快速確定瞭亮,要優(yōu)先察看哪個問題方仿。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市统翩,隨后出現(xiàn)的幾起案子仙蚜,更是在濱河造成了極大的恐慌,老刑警劉巖唆缴,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳍征,死亡現(xiàn)場離奇詭異,居然都是意外死亡面徽,警方通過查閱死者的電腦和手機艳丛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趟紊,“玉大人氮双,你說我怎么就攤上這事■伲” “怎么了戴差?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铛嘱。 經常有香客問我暖释,道長,這世上最難降的妖魔是什么墨吓? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任球匕,我火速辦了婚禮,結果婚禮上帖烘,老公的妹妹穿的比我還像新娘亮曹。我一直安慰自己,他們只是感情好秘症,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布照卦。 她就那樣靜靜地躺著,像睡著了一般乡摹。 火紅的嫁衣襯著肌膚如雪役耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天聪廉,我揣著相機與錄音瞬痘,去河邊找鬼氏义。 笑死,一個胖子當著我的面吹牛图云,可吹牛的內容都是我干的。 我是一名探鬼主播邻邮,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼竣况,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筒严?” 一聲冷哼從身側響起丹泉,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸭蛙,沒想到半個月后摹恨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡娶视,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年晒哄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肪获。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡寝凌,死狀恐怖,靈堂內的尸體忽然破棺而出孝赫,到底是詐尸還是另有隱情较木,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布青柄,位于F島的核電站伐债,受9級特大地震影響,放射性物質發(fā)生泄漏致开。R本人自食惡果不足惜峰锁,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喇喉。 院中可真熱鬧祖今,春花似錦、人聲如沸拣技。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膏斤。三九已至徐绑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莫辨,已是汗流浹背傲茄。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工毅访, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盘榨。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓喻粹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親草巡。 傳聞我的和親對象是個殘疾皇子守呜,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容

  • 1. 問題的提出## 在應用系統(tǒng)開發(fā)初期,由于開發(fā)數(shù)據(jù)庫數(shù)據(jù)比較少山憨,對于查詢SQL語句查乒,復雜視圖的的編寫等體會不出...
    七寸知架構閱讀 5,360評論 1 111
  • 看了Joy一篇關于網絡部分優(yōu)化的文章,總結一下郁竟,方便以后查閱使用 目前客戶端存在的網絡問題主要有下面幾方面: 1....
    SpursGo閱讀 3,609評論 1 5
  • 前言 代碼優(yōu)化玛迄,一個很重要的課題∨锬叮可能有些人覺得沒用蓖议,一些細小的地方有什么好修改的,改與不改對于代碼的運行效率有什...
    晴天小豬_abc8閱讀 244評論 0 0
  • 1.哪個桶先裝滿水蔑舞? 每逢下午三四點兩只眼睛就撐不住打起架來拒担,卻還要時不時盯著屏幕看是否有人咨詢報價以便第一時間給...
    肉都給我吃閱讀 619評論 0 1
  • 認知偏差!攻询!太酷了4雍场!钧栖! 框架效應 搞明白2個例子栗子:杰克在看安妮低零,而安妮在看喬治。杰克結婚了拯杠,喬治未婚掏婶,那么,...
    法雲(yún)閱讀 252評論 0 0