Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android性能優化——工具篇

Android性能優化——工具篇

編輯:關於Android編程

Android性能優化是Android開發中經常遇見的一個問題,接下來將對Android性能優化方面的知識點做一個簡單的梳理和總結,將從工具和代碼兩方面進行梳理。所謂工欲善其事必先利其器,本文首先來看一下Android性能優化有哪些得力的工具。


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();
	}
}
在結束後會生成".trace"文件,然後 通過命令traceview *.trace對數據文件進行分析。startMethodTracing共有6個重載的方法,在調用時可以根據需要進行調用。如果采用不帶參數的方法,產生的“.trace"文件默認將存放到外置存儲器根目錄下(/sdcard/),名為”dmtrace.trace",為了方便這裡建議自定義trace的名稱(startMethodTracing(String traceName))。 方法二:traceview也可以在ddms中直接使用,即在ddms中在選中某個要進行監控的進程後,點擊如圖所示的小圖標開始監控,在監控結束時再次點擊小圖標,ddms會自動打開traceview視圖: vcq9oaMKPGJyPgoKPGgzPsrTzby94rbBo7o8L2gzPgrPwsPmtcTK0828ysfO0tTaZGRtc9bQvOC/2GNvbS50ZW5jZW50Lm1vYmlsZXFxvfizzKOoy+ax49GhtcTSu7j2o6nJ+rPJtcShowo8aW1nIHNyYz0="/uploadfile/Collfiles/20140509/2014050909131720.jpg" alt="\"> 可以看出整個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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved