安卓性能優(yōu)化報(bào)告

本期迭代的任務(wù)是改善過度繪制和優(yōu)化布局嵌套暂题。

  • 首先檢查項(xiàng)目中是否存在過渡繪制的頁面桐玻,并減少過渡繪制简识。

  • 再查看當(dāng)前App的布局嵌套拔妥,學(xué)習(xí)使用merge標(biāo)簽降低布局的層級(jí)

什么是過度繪制忿危?

簡(jiǎn)單來講,過度繪制是指像素點(diǎn)重復(fù)繪制了多次没龙。我們可以打開手機(jī)或者模擬器的開發(fā)者選項(xiàng)铺厨,來查看當(dāng)前應(yīng)用程序是否存在過度繪制缎玫。這時(shí)我們可以看到屏幕出現(xiàn)多種顏色。

不同顏色代表含義(無色:無過度繪制解滓,即該像素點(diǎn)只繪制1次赃磨;藍(lán)色:1x過度繪制,即該像素點(diǎn)繪制了2次洼裤;綠色:2x過度繪制邻辉;淺紅:3x過度繪制;紅色:4x過度繪制)

一般項(xiàng)目的驗(yàn)收標(biāo)準(zhǔn)是:不允許出現(xiàn)黑色像素腮鞍;不允許存在4x過度繪制值骇;不允許存在面積超過屏幕1/4區(qū)域的3x過度繪制(淡紅色區(qū)域)

布局層級(jí)這么復(fù)雜,我們要如何找到多余的布局并將其優(yōu)化掉呢移国?下面來介紹一個(gè)小工具(作用于靜態(tài)的Activity吱瘩,筆者在嵌套fragment的Activity中嘗試執(zhí)行失敗)

Scalpel

Scalpel是由JakeWharton大神開源的一個(gè)Android項(xiàng)目桥狡,用于分析解剖Android程序的界面布局并展現(xiàn)出3D效果搅裙。Scalpel使用非常簡(jiǎn)單,只要將ScalpelFrameLayout作為根布局即可裹芝。

第一步:在Gradle中引入Scalpel

api 'com.jakewharton.scalpel:scalpel:1.1.2'

第二步:在需要觀察3D布局的activity布局文件中部逮,將ScalpelFrameLayout作為根布局

<com.jakewharton.scalpel.ScalpelFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</com.jakewharton.scalpel.ScalpelFrameLayout>

第三步:在Activity的onCreate里,添加如下代碼

        ScalpelFrameLayout scalpelFrameLayout = new ScalpelFrameLayout(this);
        View view = LayoutInflater.from(this).inflate(R.layout.sample_activity, null);
        scalpelFrameLayout.addView(view);
        setContentView(scalpelFrameLayout);
        //以下可選
    //是否顯示3D布局
    scalpelFrameLayout.setLayerInteractionEnabled(true);
    //是否顯示view的布局
    scalpelFrameLayout.setDrawViews(true);
    //是否顯示view的ID
    scalpelFrameLayout.setDrawIds(true);
    //設(shè)置布局邊框的顏色
    scalpelFrameLayout.setChromeColor(0xff00ff00);
    //設(shè)置布局邊框的陰影顏色
    scalpelFrameLayout.setChromeShadowColor(0xff0000ff);
下面以簡(jiǎn)單的登陸頁面為例嫂易,看看工具的使用效果:

如圖所示兄朋,我們現(xiàn)在是有6層布局,有的看上去明顯是不需要繪制的怜械,那么我們來分析一下颅和,怎么去掉多余的繪制呢。
首先缕允,自己代碼中找到兩層多余的繪制



再者峡扩,系統(tǒng)自帶一層繪制,我們將那層繪制去掉障本,可以讓全部的頁面減少一層繪制教届。

getWindow().setBackgroundDrawable(null);

除了去除多余的背景色之后,我們來看看效果驾霜。

如何查看布局嵌套

AS自帶的開發(fā)工具Layout Inspector可以查看每個(gè)頁面的Component Tree案训。

(具體用法網(wǎng)上有很多優(yōu)秀的文檔,我不贅述粪糙。)
通過這個(gè)工具强霎,我們可以看到系統(tǒng)的層級(jí),以及我們自己代碼中蓉冈,是否存在多余層級(jí)城舞。


系統(tǒng)層級(jí)

項(xiàng)目代碼層級(jí)

對(duì)于嵌套復(fù)雜的布局可以使用 include轩触、merge進(jìn)行優(yōu)化

merge的作用

merge標(biāo)簽是作為include標(biāo)簽的一種輔助擴(kuò)展來使用的,它的主要作用是為了防止在引用布局文件時(shí)產(chǎn)生多余的布局嵌套椿争。大家都知道怕膛,Android去解析和展示一個(gè)布局是需要消耗時(shí)間的,布局嵌套的越多秦踪,那么解析起來就越耗時(shí)褐捻,性能也就越差,因此我們?cè)诰帉懖季治募r(shí)應(yīng)該讓嵌套的層數(shù)越少越好椅邓。

merge的用法

merge標(biāo)簽只能作為根布局存在柠逞,通過include標(biāo)簽放到相應(yīng)的布局位置,這樣merge就能讓頁面直接繼承父布局景馁,減少一層布局嵌套板壮。




去除了LinearLayout


優(yōu)化前

優(yōu)化后

(優(yōu)化后的頁面開了開發(fā)者模式里過度繪制檢查的代碼)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市合住,隨后出現(xiàn)的幾起案子绰精,更是在濱河造成了極大的恐慌,老刑警劉巖透葛,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笨使,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡僚害,警方通過查閱死者的電腦和手機(jī)硫椰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨蚕,“玉大人靶草,你說我怎么就攤上這事≡酪#” “怎么了奕翔?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浩蓉。 經(jīng)常有香客問我糠悯,道長(zhǎng),這世上最難降的妖魔是什么妻往? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮试和,結(jié)果婚禮上讯泣,老公的妹妹穿的比我還像新娘。我一直安慰自己阅悍,他們只是感情好好渠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布昨稼。 她就那樣靜靜地躺著,像睡著了一般拳锚。 火紅的嫁衣襯著肌膚如雪假栓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天霍掺,我揣著相機(jī)與錄音匾荆,去河邊找鬼。 笑死杆烁,一個(gè)胖子當(dāng)著我的面吹牛牙丽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兔魂,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼烤芦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了析校?” 一聲冷哼從身側(cè)響起构罗,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎智玻,沒想到半個(gè)月后遂唧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尚困,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蠢箩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片事甜。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谬泌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逻谦,到底是詐尸還是另有隱情掌实,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布邦马,位于F島的核電站贱鼻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滋将。R本人自食惡果不足惜邻悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望随闽。 院中可真熱鬧父丰,春花似錦、人聲如沸掘宪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至镀首,卻和暖如春坟漱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背更哄。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工芋齿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竖瘾。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓沟突,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捕传。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惠拭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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