版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第12章Android應(yīng)用的性能優(yōu)化
本章簡介本章將詳細(xì)介紹復(fù)雜Android應(yīng)用程序的性能優(yōu)化技術(shù),包括布局優(yōu)化技術(shù)、內(nèi)存優(yōu)化技術(shù)以及與性能檢測和測試工具的使用方法。12.1性能優(yōu)化技術(shù)簡介12.2布局優(yōu)化12.3內(nèi)存優(yōu)化12.4使用TraceView工具優(yōu)化App性能12.5小結(jié)12.6習(xí)題
12.1性能優(yōu)化技術(shù)簡介
性能優(yōu)化包含多方面內(nèi)容,通??梢詮南率鼋嵌葍?yōu)化Android應(yīng)用程序。(1)應(yīng)用程序的容錯(cuò)性(2)應(yīng)用程序代碼中方法的執(zhí)行效率(3)應(yīng)用程序的系統(tǒng)資源消耗(4)優(yōu)化AndroidUI界面(1)應(yīng)用程序的容錯(cuò)性容錯(cuò)性仍然屬于編碼的范疇,它直接決定了程序能否令用戶滿意。如果程序經(jīng)常崩潰或出錯(cuò),很難引起用戶的興趣。(2)應(yīng)用程序代碼中方法的執(zhí)行效率應(yīng)用程序代碼最基本的調(diào)用單元是方法。因此,方法的執(zhí)行效率也在很大程度上決定了程序整體的效率。雖然很多代碼是經(jīng)過優(yōu)化的,但實(shí)際上卻不一定得到更高的執(zhí)行效率。因此,要借助各種工具對(duì)程序中的核心方法進(jìn)行調(diào)優(yōu)。(3)應(yīng)用程序的系統(tǒng)資源消耗盡管應(yīng)用程序的執(zhí)行效率很高,但是占用大量系統(tǒng)資源所換來的高效率在大多數(shù)情況下卻是不可取的。因此,應(yīng)仔細(xì)平衡應(yīng)用程序的執(zhí)行效率和資源消耗。(4)優(yōu)化AndroidUI界面不合理的UI界面設(shè)計(jì)也會(huì)占用大量系統(tǒng)資源,并且可能會(huì)在不同配置的手機(jī)上失真顯示。例如,不同屏幕分辨率的手機(jī)需要相應(yīng)分辨率的圖像;如果圖像色彩過于絢麗,只使用相同分辨率的圖像可能會(huì)造成UI界面的圖像失真。12.2布局優(yōu)化
Android系統(tǒng)在渲染UI界面時(shí)將消耗大量的資源,設(shè)計(jì)良好的UI界面不僅應(yīng)具有良好的視覺效果,還應(yīng)具有良好的用戶體驗(yàn)。12.2.1AndroidUI渲染機(jī)制如果要使人眼感覺到流暢的畫面,就需要畫面的繪制幀數(shù)至少達(dá)到40或60fps以上。Android系統(tǒng)通過VSYNC信號(hào)觸發(fā)對(duì)UI的渲染、重繪,其間隔時(shí)間是16ms,即畫面的繪制幀數(shù)可達(dá)60fps。如果能夠保證每次渲染畫面的時(shí)間都保持在16ms以內(nèi),那么用戶觀察到的UI界面將是非常流暢的。Android系統(tǒng)提供了檢測UI渲染時(shí)間的工具。打開Android設(shè)置下的“開發(fā)者選項(xiàng)”,選擇“ProfileGPURending”,并選中“Onscreenasbars”的選項(xiàng),這時(shí)在屏幕上將顯示一個(gè)條形圖,如圖12-1所示。圖12-1ProfileGPURending工具渲染時(shí)間用柱狀圖表述,每條柱狀圖由三部分組成,分別為藍(lán)、紅、黃,代表渲染的三個(gè)不同階段,通過分析這三個(gè)階段的時(shí)間即可找到渲染時(shí)的性能瓶頸。12.2.2避免過度繪制過度繪制會(huì)浪費(fèi)很多的CPU和GPU資源。例如,Android系統(tǒng)默認(rèn)會(huì)繪制Activity的背景,如果再給布局繪制了重疊的背景,那么默認(rèn)的Activity背景就是過度繪制。Android系統(tǒng)在開發(fā)者選項(xiàng)中提供了一個(gè)檢測工具——“EnableGPUOverdraw”。激活后,可通過界面上的顏色判斷過度繪制的次數(shù)。圖12-2EnableGPUOverdraw工具12.2.3優(yōu)化布局層級(jí)
Android系統(tǒng)對(duì)View的測量、布局和繪制都需要遍歷View樹。如果View樹過高,就會(huì)影響其速度。Google建議View樹的結(jié)構(gòu)不宜超過十層,優(yōu)化布局的一個(gè)方法就是盡量降低View樹的高度。1.使用<include>標(biāo)簽重用布局為保持應(yīng)用程序中所有UI界面都具有統(tǒng)一的風(fēng)格,往往會(huì)使用一些公用的UI。對(duì)于這些公用的UI,如果采用代碼復(fù)制的方法,不僅不利于后期對(duì)代碼的維護(hù),而且會(huì)增加了代碼的冗余。可通過定義出一個(gè)公用的UI,然后再在布局文件中使用<include>標(biāo)簽引用該公用UI的方法,達(dá)到重用UI的目的。2.使用<ViewStub>實(shí)現(xiàn)View的延遲加載
除通過<include>標(biāo)簽引用公用UI之外,還可以使用<ViewStub>標(biāo)簽引用公用UI并實(shí)現(xiàn)對(duì)它的延遲加載。<ViewStub>是一個(gè)輕量級(jí)的組件,它的大小為0,默認(rèn)不可見。當(dāng)定義完成公用UI之后,可在使用該公用UI的布局文件中通過添加<ViewStub>標(biāo)簽,并將標(biāo)簽下的layout屬性設(shè)置為公用UI的ID,引用該組件。例如,可使用下述粗體字標(biāo)記的代碼在布局文件中添加對(duì)公用UI的引用。12.3內(nèi)存優(yōu)化12.3.1Android的內(nèi)存由于Android的沙箱機(jī)制,它為各個(gè)應(yīng)用分配的內(nèi)存大小是有限的。如果應(yīng)用程序的內(nèi)存過低就會(huì)觸發(fā)Android系統(tǒng)的LMK機(jī)制(LowMemoryKiller)。Android系統(tǒng)采用的是Java內(nèi)存劃分方式,它主要包括以下幾個(gè)部分:(1)寄存器(Registers)寄存器位于處理器內(nèi)部,它是運(yùn)行速度最快的存儲(chǔ)器。在寄存器內(nèi)的存儲(chǔ)區(qū)域是由編譯器在編譯應(yīng)用程序時(shí)自動(dòng)分配的,無法使用代碼方式來控制應(yīng)用程序?qū)拇嫫鞯氖褂谩?2)棧(Stack)棧位于RAM中,對(duì)棧中數(shù)據(jù)的訪問速度僅次于寄存器。棧主要用于存放對(duì)象引用以及基本的數(shù)據(jù)類型,不能存儲(chǔ)Java對(duì)象。(3)堆(Heap)堆是一種通用的內(nèi)存空間,它主要用于存儲(chǔ)由new創(chuàng)建的對(duì)象和數(shù)組。在堆中分配的內(nèi)存,由java虛擬機(jī)的自動(dòng)垃圾回收機(jī)制(GC)管理。(4)靜態(tài)存儲(chǔ)區(qū)域(StaticField)靜態(tài)存儲(chǔ)區(qū)域指的是在指定的內(nèi)存區(qū)域存放應(yīng)用程序運(yùn)行期間一直使用的數(shù)據(jù)。Java在內(nèi)存中專門劃分了一個(gè)靜態(tài)存儲(chǔ)區(qū)域用于管理一些特殊的數(shù)據(jù)變量(例如靜態(tài)的數(shù)據(jù)變量)。12.3.2內(nèi)存優(yōu)化方法
可分別從Bitmap優(yōu)化和代碼優(yōu)化兩個(gè)角度優(yōu)化應(yīng)用程序使用的內(nèi)存。1.Bitmap優(yōu)化Bitmap是造成內(nèi)存占用過高甚至是OOM(OutofMemory)的最大威脅,下面給出一些優(yōu)化使用Bitmap的方法。(1)使用適當(dāng)分辨率的圖片:Android系統(tǒng)在適配資源時(shí)會(huì)對(duì)不同分辨率文件夾下的圖片進(jìn)行縮放。如果圖片分辨率與資源文件夾分辨率不匹配或者圖片分辨率太高,就會(huì)導(dǎo)致系統(tǒng)消耗過多的內(nèi)存資源??筛鶕?jù)應(yīng)用程序的不同功能,為其選擇合適大小的圖片。例如:可在圖片列表界面使用圖片的縮略圖thumbnails,而在詳細(xì)顯示該圖片時(shí)才顯示原圖;或者在對(duì)于圖像要求不高的地方,盡量降低圖片精度。(2)及時(shí)回收內(nèi)存:一旦使用完Bitmap后,應(yīng)及時(shí)使用bitmap.recycle()方法釋放內(nèi)存資源。自Android3.0之后,由于Bitmap被放置到了堆中,其內(nèi)存由GC管理。(3)使用圖片緩存:通過內(nèi)存緩存和硬盤緩存可以更好地使用Bitmap。12.4使用TraceView工具優(yōu)化App性能
TraceView是
AndroidSDK內(nèi)置的一個(gè)工具,它可以加載trace文件,以圖形的形式展示代碼的執(zhí)行時(shí)間、次數(shù)及調(diào)用棧,便于分析、優(yōu)化應(yīng)用程序的性能。12.4.1生成TraceView日志TraceView日志主要有兩種生成方法:第一種方法是在Java代碼內(nèi)嵌入Debug類生成日志文件,第二種方法則是利用AndroidDeviceMonitor輔助工具生成日志文件。1.通過代碼生成精確范圍內(nèi)的TraceView日志在應(yīng)用程序的Java代碼內(nèi),可使用Debug類生成精確范圍內(nèi)的TraceView日志。Debug類提供了startMethodTracing()方法用于開啟TraceView監(jiān)聽,同時(shí)它也提供了stopMethodTracing()方法用于結(jié)束TraceView監(jiān)聽。當(dāng)有日志跟蹤要求時(shí),可使用這兩個(gè)方法包圍需要監(jiān)聽的代碼塊。例如:可在Activity的onCreate()方法中調(diào)用startMethodTracing()方法開始監(jiān)聽,在onDestory()方法中調(diào)用stopMethodTracing()方法2.通過AndroidDeviceMonitor生成TraceView日志AndroidDeviceMonitor是一個(gè)獨(dú)立的工具,可以對(duì)Android應(yīng)用進(jìn)行調(diào)試和分析。可按照下述步驟打開AndroidDeviceMonitor生成TraceView日志文件。從菜單項(xiàng)選擇Tools—>Android—>AndroidDeviceMonitor,打開AndroidDeviceMonitor工具,如圖12-4所示。圖12-4打開AndroidDeviceMonitor工具12.4.2打開TraceView日志
對(duì)于導(dǎo)出的TraceView日志文件,可在AndroidDeviceMonitor的“File”菜單下,選擇“OpenFile…”選項(xiàng),在彈出的文件選擇框中選中日志文件,將其打開,如圖12-6所示。圖12-6打開TraceView日志文件12.4.3分析TraceView日志
TraceView的分析窗口分為兩個(gè)部分,上部窗口用于顯示應(yīng)用程序的執(zhí)行時(shí)間,下部窗口則用于顯示詳細(xì)信息的profile區(qū)域,如圖12-7所示。圖12-7TraceView分析窗口1.時(shí)間軸區(qū)域時(shí)間軸區(qū)域顯示了不同線程在不同時(shí)段內(nèi)的執(zhí)行情況。在時(shí)間軸中,每一行都代表一個(gè)獨(dú)立的線程,使用鼠標(biāo)滾輪可以放大時(shí)間軸。如圖12-8所示,在時(shí)間軸中不同色塊代表了不同的執(zhí)行方法;色塊的長度代表了方法的執(zhí)行時(shí)間。圖12-8TraceView時(shí)間軸2.Profile區(qū)域Profile區(qū)域顯示了所選擇的色塊所代表的方法在該色塊所處的時(shí)間段內(nèi)的性能分析。如圖12-9所示,在Profile區(qū)域主要顯示下述信息:InclCPUTime:表示某方法占用CPU的時(shí)間。ExclCPUTime:表示某方法(不包含子方法)占用CPU的時(shí)間。InclRealTime:表示某方法的真實(shí)執(zhí)行時(shí)間。ExclRealTime:表示某方法(不包含子方法)的真實(shí)執(zhí)行時(shí)間。Calls+RecurCalls:表示對(duì)某方法調(diào)用次數(shù)和遞歸回調(diào)的次數(shù)。圖12-9Profile區(qū)域12.5小結(jié)本章主要介紹了Android應(yīng)用的性能優(yōu)化方法,包括布局優(yōu)化技術(shù)、內(nèi)存優(yōu)化技術(shù)以及與性能檢測和測試工具的使用方法。在學(xué)習(xí)上述內(nèi)容時(shí),應(yīng)重點(diǎn)掌握布局
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型農(nóng)村宅基地使用權(quán)轉(zhuǎn)讓合同范本
- 二零二五年度噴漆作業(yè)場所職業(yè)健康監(jiān)護(hù)與疾病預(yù)防合同
- 二零二五年度企業(yè)VI系統(tǒng)全案定制合同3篇
- 二零二五年度戶外噴泉節(jié)能改造專項(xiàng)合同
- 二零二五年度土地整治土石方運(yùn)輸及土壤改良合同6篇
- 2025年度智能車展合作項(xiàng)目合作協(xié)議書范本4篇
- 2025版中學(xué)校園食品安全供應(yīng)與配送合作協(xié)議3篇
- 二零二五年度工業(yè)用地土地廠房轉(zhuǎn)讓與產(chǎn)業(yè)升級(jí)合同
- 珠海城市職業(yè)技術(shù)學(xué)院《韓國語語法》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度農(nóng)產(chǎn)品供應(yīng)鏈合作協(xié)議書2篇
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末聯(lián)考化學(xué)試題(含答案)
- 小王子-英文原版
- 新版中國食物成分表
- 2024年山東省青島市中考生物試題(含答案)
- 河道綜合治理工程技術(shù)投標(biāo)文件
- 專題24 短文填空 選詞填空 2024年中考英語真題分類匯編
- 再生障礙性貧血課件
- 產(chǎn)后抑郁癥的護(hù)理查房
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 電能質(zhì)量與安全課件
- 工程項(xiàng)目設(shè)計(jì)工作管理方案及設(shè)計(jì)優(yōu)化措施
評(píng)論
0/150
提交評(píng)論