Android性能優化是Android開發中經常遇見的一個問題,接下來將對Android性能優化方面的知識點做一個簡單的梳理和總結,將從工具和代碼兩方面進行梳理。所謂工慾善其事必先利其器,本文首先來看一下Android性能優化有哪些得力的工具。
1、TraceView
traceview是Android SDK中自帶的一個工具,可以對應用中方法調用耗時進行統計分析,是Android性能優化和分析時一個很重要的工具。traceview位於SDK下的tools目錄中,使用時可以在cmd窗口運行traceview命令,也可以在ddms中使用,我個人比較偏向於後一種方式,比較方便易操作,不需要修改代碼。
使用方法:
- 方法一:在相應進行traceview分析的開始位置和結束位置分別調用startMethodTracing和stopMethodTracing方法,可見下面的示例代碼:
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Debug.startMethodTracing();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- Debug.stopMethodTracing();
- }
- }
- 方法二:traceview也可以在ddms中直接使用,即在ddms中在選中某個要進行監控的進程後,點擊如圖所示的小圖標開始監控,在監控結束時再次點擊小圖標,ddms會自動打開traceview視圖:
這兩種使用方式,各有優缺點:第一種監控過程比較精確,但需要修改代碼;第二種監控使用方便,不需要修改代碼,但步入第一種精確。我個人在使用時一般比較偏向第二種使用方式。
視圖解讀:
下面的視圖是我在ddms中監控com.tencent.mobileqq進程(隨便選的一個)生成的。
可以看出整個traceview視圖分爲上下兩大部分,上半部分被稱爲時間軸面板(Timeline Panel),下半部分被稱爲分析面板(Profile
Panel)。
- 時間軸面板
界面上方的尺子代表了MethodTracing的時間段(從Debug.startMethodTracing()到Debug.stopMethodTracing()的時間)。每個線程的函數執行時間圖處於和線程名同一行的右側。注1:線寬度代表執行該函數本身操作所用的時間。注2:函數所調用的子函數時間線夾雜在該函數本身操作所用的時間線之間。注3:時間線的高度不知道有什麼意義。注4:函數本身是嵌套的。注5:每行下面粗的線段標註了Profile Panel中被選中函數調用所消耗的時間段。每個線段對應一次函數的運行。
- 分析面板
Exclusive time是該函數本身基本操作(不包括子函數調用)的時間。Inclusive time是該函數調用所用的時間(包括子函數調用)的時間。列1:"Name"表示函數名。雙擊函數名,可以看到在上半界面是時間軸面圖(Timeline Panel)看他的所消耗的時間段。(用粗的線段標註)。雙擊函數名左邊的"+"展開後可以看到,該函數的"parents"和"children"列2:"incl%"表示函數的Inclusive time在整個MethodTracing時間裏佔的百分比。列3:"Inclusive"表示Inclusive time。列4:"Excl%"表示函數的Exclusive time在整個MethodTracing時間裏佔的百分比。列5:"Exclusive"表示Exclusive time。列6:"Calls+RecurCalls/Total"表示對函數的調用次數(包括遞歸調用)。如圖2的nativeFinished()那列爲"14+0"表示14次非遞歸調用,0次遞歸調用.列7:新的版本(比如2.1)還有"time/calls"表示平均的調用時間(即Inclusive time/ total calls)。如圖3。來自google文檔的圖2感覺有老了。注:如果函數A調用函數B那麼函數A稱爲函數B的"parents",函數B稱爲函數A的"children."
Google關於traceview工具的介紹可參考http://developer.android.com/intl/zh-cn/tools/debugging/debugging-tracing.html
2、APT
APT工具是騰訊公司內部開發使用的一款性能分析工具,主要可以用來對進程的CPU和內存進行監視很分析,使用非常方便,下面是截圖:
對於APT的原理比較簡單,就是利用top和dump命令抓取數據,所以,這裏如果我們不用APT,自己寫個小程序調用top也是一樣的。對於APT的使用比較簡單,一目瞭然,折利率不再贅述。
APT軟件現在已經開源,可參考:https://code.csdn.net/Tencent/apt/
3、System Information
System Information是集成在DDM中的一款工具,可以用用來對CPU、內存和幀進行抓取,與APT不同的是System Information抓取的是整個系統的某個瞬間信息。先是其使用時的截圖,具體使用方法比較簡單,不再贅述。
4、MAT
MAT工具可謂大名鼎鼎,是用來進行內存泄露分析的主要工具。MAT Eclipse 插件的安裝地址爲:http://download.eclipse.org/mat/1.3.1/update-site/。關於MAT的使用這裏就不介紹了,網上關於它的材料到處都是,沒有必要重複造車輪子。這裏要說明的一點事:在通過dump生成prof文件時,生成的文件MAT不能直接使用,必須通過hprof-conv命令進行轉換處理。如果使用MAT的Eclipse插件,則不需要轉化,Eclipse會
自動處理,因此建議採用後一種方式。下面是MAT的一張圖: