1. 程式人生 > >Android效能優化——工具篇

Android效能優化——工具篇

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();
	}
}
在結束後會生成".trace"檔案,然後 通過命令traceview *.trace對資料檔案進行分析。startMethodTracing共有6個過載的方法,在呼叫時可以根據需要進行呼叫。如果採用不帶引數的方法,產生的“.trace"檔案預設將存放到外接儲存器根目錄下(/sdcard/),名為”dmtrace.trace",為了方便這裡建議自定義trace的名稱(startMethodTracing(String traceName))。
  • 方法二: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."

2、APT

APT工具是騰訊公司內部開發使用的一款效能分析工具,主要可以用來對程序的CPU和記憶體進行監視很分析,使用非常方便,下面是截圖:
對於APT的原理比較簡單,就是利用top和dump命令抓取資料,所以,這裡如果我們不用APT,自己寫個小程式呼叫top也是一樣的。對於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的一張圖:

相關推薦

Android效能優化——工具

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

Android 效能優化——記憶體

歡迎轉載,轉載請標明出處【Hoolay Team】: http://www.cnblogs.com/hoolay/p/6278229.html Author : Hoolay Android Team  Chiclaim 一、android官方一

Android 效能優化—記憶體

一、android官方一些記憶體方面的記憶體tips 1、避免建立不必要的物件。 如儘量避免字串的加號拼接,可以使用StringBuilder來拼接。 如果需要TextView設定多個字串片段,可以使用textView.append方法,不要直接用加號拼起

Android 系統性能優化(28)---Android 效能優化工具集合

磁碟檔案讀寫:每次開啟、關閉或者讀寫檔案,作業系統都需要經過從使用者態轉換為核心態的切換,這種狀態的切換本身是很消耗效能的,所以為了提高檔案的讀寫效率,就需要儘量減少使用者態和核心態的切換。使用快取可以避免重複讀寫,對於需要多次訪問的資料,在第一次取出資料的時候,將資料放在快

Android效能優化--記憶體

看到很多關於記憶體優化的部落格好文,也收藏了好多地址,但每次看時都需要在眾多收藏的地址裡尋找一番,不如寫到自己的部落格裡,方便隨時翻看。 記憶體優化也是android進階的必學內容。APP記憶體的使用,是評價一款應用效能高低的一個重要指標。 1.記憶體與記憶

React效能優化——工具

實際上, React 使用 Virtual DOM 做優化,在內部已經儘可能的減少了真實 DOM 操作,然而還是可以做一些優化。從工具方面,可以使用以下幾種工具檢測我們的程式碼效能。 轉載https://wulv.site/2017-07-01/react-perf-tools.html React

Android效能優化工具 — — Android Lint

Lint簡介 Android lint是在ADT16提供的新工具,它是一個程式碼掃描工具,能夠幫助我們識別資源、程式碼結構存在的問題。 Lint優化哪些問題 遺漏的翻譯(沒用上的翻譯)比如國際化未被翻譯的欄位值 佈局效能(以前是 layoutop

Android效能優化工具 — — 開發者選項

Google為了方便開發者除錯Android程式專門開發了開發者選項功能,能夠讓開發者方便快捷除錯Android應用程式。對於一般使用者無需關注,所以往往開發者選項在新版本中都會隱藏,需要特殊操作才會展示入口,比如連續點選版本號等等。當然還有許多國內定製系統開啟開發者選項的方

【朝花夕拾】Android效能優化之(四)Apk打包

        APK,即Android Package,是將android程式和資源整合在一起,形成的一個.apk檔案。相信所有的Android程式設計師是在IDE的幫助下,完成打包輕而易舉,但對打包流程真正清楚的可能並不多。本章的內容比較簡單,也是非常基礎的內容,但是對理解android應用的結構卻有很大

【朝花夕拾】Android效能優化之(一)序言及JVM

序言 筆者從事Anroid開發有些年頭了,深知掌握Anroid效能優化方面的知識的必要性,這是一個程式設計師必須修煉的內功。在面試中,它是面試官的摯愛,在工作中,它是程式碼質量的攔路虎,其重要性可見一斑。在團隊中,效能優化的工作又往往由經驗豐富的老師傅來完成,可見要做好效能優化,絕不是一件容易的事情。    

【朝花夕拾】Android效能優化之(五)Android虛擬機器簡介

前言        Android虛擬機器的使用,使得android應用和Linux核心分離,這樣做使得android系統更穩定可靠,比如程式中即使包含惡意程式碼,也不會直接影響系統檔案;也提高了跨平臺相容性。在Android4.4以前的系統中,Android系統均採用Dalvik作為執行andorid程式的

【朝花夕拾】Android效能優化之(五)Android虛擬機器

前言        Android虛擬機器的使用,使得android應用和Linux核心分離,這樣做使得android系統更穩定可靠,比如程式中即使包含惡意程式碼,也不會直接影響系統檔案;也提高了跨平臺相容性。在Android4.4以前的系統中,Android系統均採用Da

Android效能優化工具之Hierarchy Viewer使用總結

概述 Hierarchy Viewer提供了一個視覺化的介面來觀測佈局的層級, 讓我們可以優化佈局層級, 刪除多餘的不必要的View層級, 提升佈局速度. 應用Hierarchy Viewer 目前Hierarchy Viewer只能在root過的機器才能使用. 主要是在沒有ro

Android LeakCanary效能優化工具

效能優化工具(九)-LeakCanary 一、簡介 使用MAT來分析記憶體問題,有一些門檻,會有一些難度,並且效率也不是很高,對於一個記憶體洩漏問題,可能要進行多次排查和對比才能找到問題原因。 為了能夠簡單迅速的發現記憶體洩漏,Square公司基於MAT開源了L

android效能優化實戰前

本文地址:http://blog.csdn.net/iamws/article/details/51629160 前言:         最近因為某專案cpu,記憶體的使用率實在讓人不敢恭維;手機發燙,電量下降已經讓使用者無法忍受;頻繁快速迭代發版導致各種效能問題突出;由

Android效能優化之記憶體優化--記憶體洩漏

文章目錄 介紹 什麼是記憶體洩露 android中導致記憶體洩漏的主要幾種情況 1.單例模式 2.使用非靜態內部類 3.使用非同步事件處理機制Handler 4.使用靜態

[Android 效能優化系列]佈局之減少你的介面層級

轉載請標明出處(http://blog.csdn.net/kifile),再次感謝 在接下來的一段時間裡,我會每天翻譯一部分關於效能提升的Android官方文件給大家 效能優化之佈局篇: 題外話: 複雜的佈局,既會提高我們的設計難度,也會降低我們的程式碼效

Android 效能優化之String

Android 效能優化之 String篇 關於String相關知識都是老掉牙的東西了,但我們經常可能在不經意的String 字串拼接的情況下浪費記憶體,影響效能,也常常會成為觸發記憶體OOM的最後一步。 所以本文對String字串進行深度解析,有

[Android 效能優化系列]記憶體之基礎--Android如何管理記憶體

轉載請標明出處(http://blog.csdn.net/kifile),再次感謝 在接下來的一段時間裡,我會每天翻譯一部分關於效能提升的Android官方文件給大家 下面是本次的正文: ################ 隨機訪問儲存器(Ram) 不管在哪種軟體開發

Android效能優化(一)——佈局優化

                                                 Android效能優化篇 題記: 不知道別人是怎麼學習的,我總是覺得我學習的效率很低,昨天發生了不愉快的事情後,我痛定思痛,反思了一下自己,還是總結不夠,也是工作中接觸的東西