Android應用程序開發(fā) 課件 第12章 Android應用的性能優(yōu)化_第1頁
Android應用程序開發(fā) 課件 第12章 Android應用的性能優(yōu)化_第2頁
Android應用程序開發(fā) 課件 第12章 Android應用的性能優(yōu)化_第3頁
Android應用程序開發(fā) 課件 第12章 Android應用的性能優(yōu)化_第4頁
Android應用程序開發(fā) 課件 第12章 Android應用的性能優(yōu)化_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第12章Android應用的性能優(yōu)化

本章簡介本章將詳細介紹復雜Android應用程序的性能優(yōu)化技術,包括布局優(yōu)化技術、內(nèi)存優(yōu)化技術以及與性能檢測和測試工具的使用方法。12.1性能優(yōu)化技術簡介12.2布局優(yōu)化12.3內(nèi)存優(yōu)化12.4使用TraceView工具優(yōu)化App性能12.5小結12.6習題

12.1性能優(yōu)化技術簡介

性能優(yōu)化包含多方面內(nèi)容,通??梢詮南率鼋嵌葍?yōu)化Android應用程序。(1)應用程序的容錯性(2)應用程序代碼中方法的執(zhí)行效率(3)應用程序的系統(tǒng)資源消耗(4)優(yōu)化AndroidUI界面(1)應用程序的容錯性容錯性仍然屬于編碼的范疇,它直接決定了程序能否令用戶滿意。如果程序經(jīng)常崩潰或出錯,很難引起用戶的興趣。(2)應用程序代碼中方法的執(zhí)行效率應用程序代碼最基本的調(diào)用單元是方法。因此,方法的執(zhí)行效率也在很大程度上決定了程序整體的效率。雖然很多代碼是經(jīng)過優(yōu)化的,但實際上卻不一定得到更高的執(zhí)行效率。因此,要借助各種工具對程序中的核心方法進行調(diào)優(yōu)。(3)應用程序的系統(tǒng)資源消耗盡管應用程序的執(zhí)行效率很高,但是占用大量系統(tǒng)資源所換來的高效率在大多數(shù)情況下卻是不可取的。因此,應仔細平衡應用程序的執(zhí)行效率和資源消耗。(4)優(yōu)化AndroidUI界面不合理的UI界面設計也會占用大量系統(tǒng)資源,并且可能會在不同配置的手機上失真顯示。例如,不同屏幕分辨率的手機需要相應分辨率的圖像;如果圖像色彩過于絢麗,只使用相同分辨率的圖像可能會造成UI界面的圖像失真。12.2布局優(yōu)化

Android系統(tǒng)在渲染UI界面時將消耗大量的資源,設計良好的UI界面不僅應具有良好的視覺效果,還應具有良好的用戶體驗。12.2.1AndroidUI渲染機制如果要使人眼感覺到流暢的畫面,就需要畫面的繪制幀數(shù)至少達到40或60fps以上。Android系統(tǒng)通過VSYNC信號觸發(fā)對UI的渲染、重繪,其間隔時間是16ms,即畫面的繪制幀數(shù)可達60fps。如果能夠保證每次渲染畫面的時間都保持在16ms以內(nèi),那么用戶觀察到的UI界面將是非常流暢的。Android系統(tǒng)提供了檢測UI渲染時間的工具。打開Android設置下的“開發(fā)者選項”,選擇“ProfileGPURending”,并選中“Onscreenasbars”的選項,這時在屏幕上將顯示一個條形圖,如圖12-1所示。圖12-1ProfileGPURending工具渲染時間用柱狀圖表述,每條柱狀圖由三部分組成,分別為藍、紅、黃,代表渲染的三個不同階段,通過分析這三個階段的時間即可找到渲染時的性能瓶頸。12.2.2避免過度繪制過度繪制會浪費很多的CPU和GPU資源。例如,Android系統(tǒng)默認會繪制Activity的背景,如果再給布局繪制了重疊的背景,那么默認的Activity背景就是過度繪制。Android系統(tǒng)在開發(fā)者選項中提供了一個檢測工具——“EnableGPUOverdraw”。激活后,可通過界面上的顏色判斷過度繪制的次數(shù)。圖12-2EnableGPUOverdraw工具12.2.3優(yōu)化布局層級

Android系統(tǒng)對View的測量、布局和繪制都需要遍歷View樹。如果View樹過高,就會影響其速度。Google建議View樹的結構不宜超過十層,優(yōu)化布局的一個方法就是盡量降低View樹的高度。1.使用<include>標簽重用布局為保持應用程序中所有UI界面都具有統(tǒng)一的風格,往往會使用一些公用的UI。對于這些公用的UI,如果采用代碼復制的方法,不僅不利于后期對代碼的維護,而且會增加了代碼的冗余??赏ㄟ^定義出一個公用的UI,然后再在布局文件中使用<include>標簽引用該公用UI的方法,達到重用UI的目的。2.使用<ViewStub>實現(xiàn)View的延遲加載

除通過<include>標簽引用公用UI之外,還可以使用<ViewStub>標簽引用公用UI并實現(xiàn)對它的延遲加載。<ViewStub>是一個輕量級的組件,它的大小為0,默認不可見。當定義完成公用UI之后,可在使用該公用UI的布局文件中通過添加<ViewStub>標簽,并將標簽下的layout屬性設置為公用UI的ID,引用該組件。例如,可使用下述粗體字標記的代碼在布局文件中添加對公用UI的引用。12.3內(nèi)存優(yōu)化12.3.1Android的內(nèi)存由于Android的沙箱機制,它為各個應用分配的內(nèi)存大小是有限的。如果應用程序的內(nèi)存過低就會觸發(fā)Android系統(tǒng)的LMK機制(LowMemoryKiller)。Android系統(tǒng)采用的是Java內(nèi)存劃分方式,它主要包括以下幾個部分:(1)寄存器(Registers)寄存器位于處理器內(nèi)部,它是運行速度最快的存儲器。在寄存器內(nèi)的存儲區(qū)域是由編譯器在編譯應用程序時自動分配的,無法使用代碼方式來控制應用程序?qū)拇嫫鞯氖褂谩?2)棧(Stack)棧位于RAM中,對棧中數(shù)據(jù)的訪問速度僅次于寄存器。棧主要用于存放對象引用以及基本的數(shù)據(jù)類型,不能存儲Java對象。(3)堆(Heap)堆是一種通用的內(nèi)存空間,它主要用于存儲由new創(chuàng)建的對象和數(shù)組。在堆中分配的內(nèi)存,由java虛擬機的自動垃圾回收機制(GC)管理。(4)靜態(tài)存儲區(qū)域(StaticField)靜態(tài)存儲區(qū)域指的是在指定的內(nèi)存區(qū)域存放應用程序運行期間一直使用的數(shù)據(jù)。Java在內(nèi)存中專門劃分了一個靜態(tài)存儲區(qū)域用于管理一些特殊的數(shù)據(jù)變量(例如靜態(tài)的數(shù)據(jù)變量)。12.3.2內(nèi)存優(yōu)化方法

可分別從Bitmap優(yōu)化和代碼優(yōu)化兩個角度優(yōu)化應用程序使用的內(nèi)存。1.Bitmap優(yōu)化Bitmap是造成內(nèi)存占用過高甚至是OOM(OutofMemory)的最大威脅,下面給出一些優(yōu)化使用Bitmap的方法。(1)使用適當分辨率的圖片:Android系統(tǒng)在適配資源時會對不同分辨率文件夾下的圖片進行縮放。如果圖片分辨率與資源文件夾分辨率不匹配或者圖片分辨率太高,就會導致系統(tǒng)消耗過多的內(nèi)存資源??筛鶕?jù)應用程序的不同功能,為其選擇合適大小的圖片。例如:可在圖片列表界面使用圖片的縮略圖thumbnails,而在詳細顯示該圖片時才顯示原圖;或者在對于圖像要求不高的地方,盡量降低圖片精度。(2)及時回收內(nèi)存:一旦使用完Bitmap后,應及時使用bitmap.recycle()方法釋放內(nèi)存資源。自Android3.0之后,由于Bitmap被放置到了堆中,其內(nèi)存由GC管理。(3)使用圖片緩存:通過內(nèi)存緩存和硬盤緩存可以更好地使用Bitmap。12.4使用TraceView工具優(yōu)化App性能

TraceView是

AndroidSDK內(nèi)置的一個工具,它可以加載trace文件,以圖形的形式展示代碼的執(zhí)行時間、次數(shù)及調(diào)用棧,便于分析、優(yōu)化應用程序的性能。12.4.1生成TraceView日志TraceView日志主要有兩種生成方法:第一種方法是在Java代碼內(nèi)嵌入Debug類生成日志文件,第二種方法則是利用AndroidDeviceMonitor輔助工具生成日志文件。1.通過代碼生成精確范圍內(nèi)的TraceView日志在應用程序的Java代碼內(nèi),可使用Debug類生成精確范圍內(nèi)的TraceView日志。Debug類提供了startMethodTracing()方法用于開啟TraceView監(jiān)聽,同時它也提供了stopMethodTracing()方法用于結束TraceView監(jiān)聽。當有日志跟蹤要求時,可使用這兩個方法包圍需要監(jiān)聽的代碼塊。例如:可在Activity的onCreate()方法中調(diào)用startMethodTracing()方法開始監(jiān)聽,在onDestory()方法中調(diào)用stopMethodTracing()方法2.通過AndroidDeviceMonitor生成TraceView日志AndroidDeviceMonitor是一個獨立的工具,可以對Android應用進行調(diào)試和分析??砂凑障率霾襟E打開AndroidDeviceMonitor生成TraceView日志文件。從菜單項選擇Tools—>Android—>AndroidDeviceMonitor,打開AndroidDeviceMonitor工具,如圖12-4所示。圖12-4打開AndroidDeviceMonitor工具12.4.2打開TraceView日志

對于導出的TraceView日志文件,可在AndroidDeviceMonitor的“File”菜單下,選擇“OpenFile…”選項,在彈出的文件選擇框中選中日志文件,將其打開,如圖12-6所示。圖12-6打開TraceView日志文件12.4.3分析TraceView日志

TraceView的分析窗口分為兩個部分,上部窗口用于顯示應用程序的執(zhí)行時間,下部窗口則用于顯示詳細信息的profile區(qū)域,如圖12-7所示。圖12-7TraceView分析窗口1.時間軸區(qū)域時間軸區(qū)域顯示了不同線程在不同時段內(nèi)的執(zhí)行情況。在時間軸中,每一行都代表一個獨立的線程,使用鼠標滾輪可以放大時間軸。如圖12-8所示,在時間軸中不同色塊代表了不同的執(zhí)行方法;色塊的長度代表了方法的執(zhí)行時間。圖12-8TraceView時間軸2.Profile區(qū)域Profile區(qū)域顯示了所選擇的色塊所代表的方法在該色塊所處的時間段內(nèi)的性能分析。如圖12-9所示,在Profile區(qū)域主要顯示下述信息:InclCPUTime:表示某方法占用CPU的時間。ExclCPUTime:表示某方法(不包含子方法)占用CPU的時間。InclRealTime:表示某方法的真實執(zhí)行時間。ExclRealTime:表示某方法(不包含子方法)的真實執(zhí)行時間。Calls+RecurCalls:表示對某方法調(diào)用次數(shù)和遞歸回調(diào)的次數(shù)。圖12-9Profile區(qū)域12.5小結本章主要介紹了Android應用的性能優(yōu)化方法,包括布局優(yōu)化技術、內(nèi)存優(yōu)化技術以及與性能檢測和測試工具的使用方法。在學習上述內(nèi)容時,應重點掌握布局

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論