下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android的UI調(diào)優(yōu)
對于一個App的UI而言,在流暢性上的改進(jìn)目標(biāo)其實(shí)就是降低屏幕繪制的延遲,創(chuàng)建流暢和穩(wěn)定的幀率以避免卡頓。
在理想情況下,全部的測量、布局和繪制的時間最好在16ms以內(nèi),這樣才能保證屏幕運(yùn)行的順暢性。而如何對屏幕渲染和UI性能進(jìn)行評估和分析呢,在AndroidSDK中集成了一些工具用來策略APP的渲染性能問題。
一、視圖的層級分析:
對于每一個視圖而言,都需要經(jīng)過三個步驟:測量、布局和渲染。而App如何繪制視圖,它需要從頂部節(jié)點(diǎn)開始測量,沿著布局樹逐個渲染,視圖樹的層級越多,嵌套測量的次數(shù)越多,測量的時間也會越長。而一旦測量完畢就會進(jìn)行布局,每個視圖都會對自己的子視圖進(jìn)行布局,子視圖布局完畢后回到父視圖,然后再到根視圖,布局完成后,每個視圖都會被繪制在屏幕上。
顯然,App的視圖越多,層級越深就需要越長的時間測量、布局和繪制,為了減少這些時間,需要盡可能保持視圖層級的扁平化并刪除所有沒有必要渲染的視圖。
雖然在XML布局文件中可以查看布局的節(jié)點(diǎn)視圖,單很難找到多余的視圖,為了找到這些多余的視圖,可以利用AndroidStudio中的HierarchyViewer工具來分析AndroidApp中的視圖。
HierarchyViewer(層次結(jié)構(gòu)查看器)能夠便捷地以可視化方式查看各種視圖嵌套關(guān)系,可用于研究XML視圖結(jié)構(gòu)。(需要一個運(yùn)行AndroidApp的設(shè)備)
利用這個工具可以查看我們的View的層次,從而借助它修改我們的布局。一般的建議:使用抽象布局標(biāo)簽(include,viewstub,merge)主要是為了優(yōu)化布局,去除不必要的嵌套和View節(jié)點(diǎn)。視圖重用多用于ListView和RecylerView等列表形式使用include嵌套布局,實(shí)現(xiàn)布局的模塊化設(shè)計,這里需要考慮到下面談到的merge標(biāo)簽的使用。<merge>標(biāo)簽
在使用了include后可能導(dǎo)致布局嵌套過多,多余不必要的layout節(jié)點(diǎn),從而導(dǎo)致解析變慢,不必要的節(jié)點(diǎn)和嵌套可通過hierarchyviewer或設(shè)置->開發(fā)者選項(xiàng)->顯示布局邊界查看。merge標(biāo)簽在UI的結(jié)構(gòu)優(yōu)化中起著非常重要的作用,它可以刪減多余的層級,優(yōu)化UI。
merge多用于替換FrameLayout或者當(dāng)一個布局包含另一個時,merge標(biāo)簽消除視圖層次結(jié)構(gòu)中多余的視圖組。
merge標(biāo)簽可用于兩種典型情況:
a.
布局頂結(jié)點(diǎn)是FrameLayout且不需要設(shè)置background或padding等屬性,可以用merge代替,因?yàn)锳ctivity內(nèi)容視圖的parentview就是個FrameLayout,所以可以用merge消除只剩一個。
b.
某布局作為子布局被其他布局include時,使用merge當(dāng)作該布局的頂節(jié)點(diǎn),這樣在被引入時頂結(jié)點(diǎn)會自動被忽略,而將其子節(jié)點(diǎn)全部合并到主布局中。<ViewStub>viewstub標(biāo)簽同include標(biāo)簽一樣可以用來引入一個外部布局,不同的是,viewstub引入的布局默認(rèn)不會擴(kuò)張,即既不會占用顯示也不會占用位置,從而在解析layout時節(jié)省cpu和內(nèi)存。
viewstub常用來引入那些默認(rèn)不會顯示,只在特殊情況下顯示的布局,如進(jìn)度布局、網(wǎng)絡(luò)失敗顯示的刷新布局、信息出錯出現(xiàn)的提示布局等。比如說,假設(shè)network_error.xml為只有在網(wǎng)絡(luò)錯誤時才需要顯示的布局,默認(rèn)不會被解析。
當(dāng)我們要使用的時候,有兩種方法可以使用,效果是一樣的:((ViewStub)findViewById(R.id.layout_error)).setVisibility(View.VISIBLE);
//或者ViewimportPanel=((ViewStub)findViewById(R.id.layout_error)).inflate();
二、資源縮減第一點(diǎn)提到的是將App的視圖結(jié)構(gòu)變扁平,減少視圖的數(shù)量后,其實(shí)我們還可以嘗試減少每個視圖里使用的資源數(shù)量。(如加載時引用一個資源,在運(yùn)行時進(jìn)行著色)三.屏幕的過度繪制
屏幕的過度繪制這個概念有點(diǎn)類似于PhotoShop中的圖層的概念,上面的圖層會覆蓋住下面的圖層,而使得下面的圖層不可見。當(dāng)Android系統(tǒng)繪制屏幕時,首先繪制父視圖而后是子視圖,子視圖位于其父視圖上。
重繪屏幕的行為被稱為過度繪制,多次的屏幕繪制會增加延遲,并且可以導(dǎo)致布局卡頓。
既然過度繪制的影響那么大,我們應(yīng)該怎么檢測呢?
Android提供了一些很好的工具來檢測過度繪制,而一般采用的方式是在DebugGPUOverdraw菜單中選擇“ShowOverdrawarea”,(在本人手機(jī)中為開發(fā)者選項(xiàng)中的調(diào)試GPU過度繪制),選擇之后會在App的不同區(qū)域覆蓋不同的顏色來表示過度繪制的次數(shù)。比較屏幕上的這些不同顏色,可以快速定位問題。
白色:沒有過度繪制藍(lán)色:1次過度繪制(屏幕繪制了2次)綠色:2次過度繪制淺紅色:3次過度繪制深紅色:4次或更多次過度繪制
而另外一種查看方法是借助于前面提到的HierarchyViewer工具,將viewhierarchy保存為Photoshop文檔,打開這些視圖后可以看到不同層次的過度繪制情況。四、分析卡頓(策略GPU的渲染能力)
在優(yōu)化視圖的層次結(jié)構(gòu)和過度繪制后,App還存在丟幀或者不流暢的情況,為了獲得獲得更加全面的卡頓檢測信息,Android系統(tǒng)中有一個ProfileGPURendering的開發(fā)者選項(xiàng),它能夠檢測出每一幀在屏幕上用了多久,策略數(shù)據(jù)可以保存到日志文件中,或者在設(shè)備上實(shí)時顯示。一般而言,在屏幕上直接展示GPU的渲染數(shù)據(jù)能夠更加直觀地看到。
在本人的手機(jī)中,在開發(fā)者選項(xiàng)中找到【GPU呈現(xiàn)模式分析】,選擇【在屏幕上顯示為條形圖】,然后打開一個手機(jī)QQ,就發(fā)現(xiàn)如下圖所示情況
需要關(guān)注的是底部的那一條水平綠線,它表示設(shè)備渲染一幀要16ms,每一幀就是一個水平條,如果有很多幀超過了這條綠線就說明設(shè)備出現(xiàn)了卡頓情況。五、讓它看起來更快
前面講到了如果通過測試發(fā)現(xiàn)問題優(yōu)化布局使得UI繪制更加流暢,其實(shí)還有一個方法使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 迪士尼樂園課件
- 租房半年鑒合同(2篇)
- 裝修類承包合同范本(2篇)
- 人教A版河北省衡水中學(xué)2023-2024學(xué)年高二下學(xué)期第二次綜合素養(yǎng)評價數(shù)學(xué)試題
- 社戲課件 圖文
- 實(shí)數(shù)課件湘教版
- 第22課《夢回繁華》八年級語文上冊精講同步課堂(統(tǒng)編版)
- 亨利詹姆斯課件
- 幼兒園小班音樂《春天天氣真好》課件
- 轉(zhuǎn)成課件 打印
- 鋼結(jié)構(gòu)工程冬季施工方案
- ktv營銷業(yè)績提成合同模板
- 英語-重慶市2025年普通高等學(xué)校招生全國統(tǒng)一考試11月調(diào)研試卷(康德卷)試題和答案
- 2024年宏觀經(jīng)濟(jì)發(fā)展情況分析報告
- 攝影入門課程-攝影基礎(chǔ)與技巧全面解析
- 251直線與圓的位置關(guān)系(第1課時)(導(dǎo)學(xué)案)(原卷版)
- XX有限公司人員分流方案
- 安徽理工大學(xué)《巖土力學(xué)與工程》2021-2022學(xué)年第一學(xué)期期末試卷
- 大語言模型賦能自動化測試實(shí)踐、挑戰(zhàn)與展望-復(fù)旦大學(xué)(董震)
- 期中模擬檢測(1-3單元)2024-2025學(xué)年度第一學(xué)期西師大版二年級數(shù)學(xué)
- 追覓科技在線測評邏輯題
評論
0/150
提交評論