您好,登錄后才能下訂單哦!
Android 中怎么使用TraceView性能分析工具 ,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
TraceView 是 Android SDK 內(nèi)置的一個(gè)工具,它可以加載 trace 文件,用圖形的形式展示代碼的執(zhí)行時(shí)間、次數(shù)及調(diào)用棧,便于我們分析。
trace 文件是 log 信息文件的一種,可以通過(guò)代碼,Android Studio,或者 DDMS 生成。
在想要記錄的地方調(diào)用 Debug.startMethodTracing("sample")
,參數(shù)指定 trace
文件的名稱(chēng)。
在結(jié)束記錄的地方調(diào)用 Debug.stopMethodTracing()
,文件會(huì)被保存到 /sdcard/Android/data/packageName/files
文件夾下。
Debug.startMethodTracing("sample"); // 開(kāi)始 trace
...
Debug.stopMethodTracing(); // 結(jié)束 trace
可以使用 adb 命令導(dǎo)出 trace 文件,使用 Android Studio Profiler 或者 DDMS 打開(kāi)。
點(diǎn)擊工具欄中的 Profiler(Android Studio 版本是 3.4.2), 點(diǎn)擊 CPU 時(shí)間軸上的任意位置以打開(kāi) CPU Profiler。
1. 事件時(shí)間軸:顯示應(yīng)用中的 Activity 在其生命周期內(nèi)不斷轉(zhuǎn)換而經(jīng)歷各種不同狀態(tài)的過(guò)程,并指示用戶與設(shè)備的交互,包括屏幕旋轉(zhuǎn)事件。
2. CPU 時(shí)間軸 : 顯示應(yīng)用的實(shí)時(shí) CPU 使用率以及應(yīng)用當(dāng)前使用的線程總數(shù)。通過(guò)沿時(shí)間線的水平軸移動(dòng)鼠標(biāo),還可以檢查歷史 CPU 使用率數(shù)據(jù)。
3. 線程活動(dòng)時(shí)間軸:應(yīng)用進(jìn)程的所有線程。不同顏色對(duì)應(yīng)的含義:
綠色:表示線程處于活動(dòng)狀態(tài)或準(zhǔn)備使用 CPU。即,它正在“運(yùn)行中”或處于“可運(yùn)行”狀態(tài)。
黃色:表示線程處于活動(dòng)狀態(tài),但它正在等待一個(gè) I/O 操作(如磁盤(pán)或網(wǎng)絡(luò) I/O),然后才能完成它的工作。
灰色:表示線程正在休眠且沒(méi)有消耗任何 CPU 時(shí)間。當(dāng)線程需要訪問(wèn)尚不可用的資源時(shí)偶爾會(huì)發(fā)生這種情況。線程進(jìn)入自主休眠或內(nèi)核將此線程置于休眠狀態(tài),直到所需的資源可用。
要開(kāi)始記錄跟蹤數(shù)據(jù),點(diǎn)擊 CPU Profiler 頂部的下拉框選擇適當(dāng)?shù)挠涗浥渲茫?/p>
對(duì) Java 方法采樣:在應(yīng)用的 Java 代碼執(zhí)行期間,頻繁捕獲應(yīng)用的調(diào)用堆棧。分析器會(huì)比較捕獲的數(shù)據(jù)集,以推導(dǎo)與應(yīng)用的 Java 代碼執(zhí)行有關(guān)的時(shí)間和資源使用信息。
跟蹤 Java 方法 :在運(yùn)行時(shí)檢測(cè)應(yīng)用,以在每個(gè)方法調(diào)用開(kāi)始和結(jié)束時(shí)記錄一個(gè)時(shí)間戳。系統(tǒng)會(huì)收集并比較這些時(shí)間戳,以生成方法跟蹤數(shù)據(jù),包括時(shí)間信息和 CPU 使用率。
對(duì) C/C++ 函數(shù)采樣:捕獲應(yīng)用的原生線程的采樣跟蹤數(shù)據(jù)。
選擇配置后,點(diǎn)擊 Record
進(jìn)行跟蹤,交互完成后點(diǎn)擊 Stop
結(jié)束數(shù)據(jù)跟蹤。分析器會(huì)分析 trace 數(shù)據(jù),如下圖所示。
1. 選擇時(shí)間范圍:確定要在跟蹤窗格中檢查所記錄時(shí)間范圍的哪一部分。當(dāng)首次記錄函數(shù)跟蹤時(shí),CPU Profiler 將在 CPU 時(shí)間線中自動(dòng)選擇完整長(zhǎng)度。如果想僅檢查所記錄時(shí)間范圍一小部分的函數(shù)跟蹤數(shù)據(jù),可以點(diǎn)擊并拖動(dòng)突出顯示的區(qū)域邊緣以修改其長(zhǎng)度。
2. 時(shí)間戳:用于表示所記錄函數(shù)跟蹤的開(kāi)始和結(jié)束時(shí)間(相對(duì)于分析器從設(shè)備開(kāi)始收集 CPU 使用率信息的時(shí)間)??梢渣c(diǎn)擊時(shí)間戳以自動(dòng)選擇完整記錄。
3. 跟蹤窗格:用于顯示所選的時(shí)間范圍和線程的函數(shù)跟蹤數(shù)據(jù)。
4. 跟蹤數(shù)據(jù)窗格標(biāo)簽:通過(guò)Call Chart(調(diào)用圖表)、Flame Chart(火焰圖)、 Top Down 樹(shù)或 Bottom Up 樹(shù)的形式顯示函數(shù)跟蹤。
Call Chart : 水平軸表示函數(shù)調(diào)用(或調(diào)用方)的時(shí)間,并沿垂直軸顯示其被調(diào)用者。對(duì)系統(tǒng) API 的函數(shù)調(diào)用顯示為橙色,對(duì)應(yīng)用自有函數(shù)的調(diào)用顯示為綠色,對(duì)第三方 API(包括 Java 語(yǔ)言 API)的函數(shù)調(diào)用顯示為藍(lán)色。
Flame Chart: 一個(gè)倒置的調(diào)用圖表,其中水平軸不再代表時(shí)間線,它表示每個(gè)函數(shù)相對(duì)的執(zhí)行時(shí)間。
Top Down:顯示一個(gè)函數(shù)調(diào)用列表,在該列表中展開(kāi)函數(shù)節(jié)點(diǎn)會(huì)顯示函數(shù)的被調(diào)用方。
Bottom Up:顯示一個(gè)函數(shù)調(diào)用列表,在該列表中展開(kāi)函數(shù)節(jié)點(diǎn)將顯示函數(shù)的調(diào)用方。
5. 時(shí)間參考菜單 :確定如何測(cè)量每個(gè)函數(shù)調(diào)用的時(shí)間信息:
Wall clock time:實(shí)際經(jīng)過(guò)的時(shí)間。
Thread time:實(shí)際經(jīng)過(guò)的時(shí)間減去線程沒(méi)有消耗 CPU 資源的時(shí)間。
DDMS 即 Dalvik Debug Monitor Server ,是 Android 調(diào)試監(jiān)控工具,它為我們提供了截圖,查看 log,查看視圖層級(jí),查看內(nèi)存使用等功能。
Android Studio 3.0 后可在 Android SDK 的 tools
目錄,找到 monitor.bat
,使用命令行啟動(dòng)它,就能打開(kāi) DDMS。
DDMS 界面點(diǎn)擊 Start Method Profiling
按鈕,開(kāi)始記錄 trace,同一個(gè)按鈕停止 trace。DDMS 會(huì)自動(dòng)啟用 TraceView 加載 trace 文件,如下圖:
圖中上半部分展示了不同線程的執(zhí)行時(shí)間,其中不同的顏色代表不同的方法,同一顏色越長(zhǎng),說(shuō)明執(zhí)行時(shí)間越長(zhǎng),空白表示這個(gè)時(shí)間段內(nèi)沒(méi)有執(zhí)行內(nèi)容。
下半部分展示了不同方法的執(zhí)行時(shí)間信息。各個(gè)指標(biāo)的含義:
Incl Cpu Time:方法占用的 CPU 時(shí)間(包括調(diào)用子函數(shù)所消耗的時(shí)間)。
Excl Cpu Time:方法自身占用的 CPU 時(shí)間(不包括調(diào)用其他方法所消耗的時(shí)間)。
Incl Real Time:方法運(yùn)行的真實(shí)時(shí)間(包括調(diào)用子函數(shù)所消耗的時(shí)間)。
Excl Real Time:方法自身運(yùn)行的真實(shí)時(shí)間(不包括調(diào)用其他方法所消耗的時(shí)間)。
Calls+RecurCalls/Total:方法被調(diào)用的次數(shù)+重復(fù)調(diào)用的次數(shù)。
Cpu Time/Call:方法調(diào)用 CPU 時(shí)間與調(diào)用次數(shù)的比,相當(dāng)于方法平均執(zhí)行時(shí)間。
Real Time/Call:同 Cpu Time/Call 類(lèi)似,只不過(guò)統(tǒng)計(jì)單位換成了真實(shí)時(shí)間。
在分析耗時(shí)的時(shí)候一般有兩種情況:
調(diào)用次數(shù)不多。但是,本身就非常耗時(shí)。
本身不是很耗時(shí)。但是,調(diào)用非常頻繁。
第一種情況,可以使用 Cpu Time
來(lái)查看它的耗時(shí)情況。
第二種情況,可以使用 Calls+RecurCalls/Total
來(lái)查看它的調(diào)用情況。
關(guān)于Android 中怎么使用TraceView性能分析工具 問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。