多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Android 性能優(yōu)化:使用 TraceView 找到卡頓的元兇

Android 性能優(yōu)化:使用 TraceView 找到卡頓的元兇

來源:程序員人生   發(fā)布時間:2017-03-21 08:49:41 閱讀次數(shù):13261次

讀完本文你將了解到:

    • 前言
    • TraceView 是甚么
    • 生成 trace 文件
      • 使用代碼生成 trace 文件
      • 使用 Android Studio 生成 trace 文件
      • 使用 DDMS 生成 trace 文件
    • 根據(jù) TraceView 顯示內(nèi)容定位問題
    • 解決 DDMS 中的 TraceView 沒法搜索find 沒法使用的問題
      • 解決辦法就是直接使用 SDK 中的 TraceView
    • TraceView 的使用處景
    • 總結(jié)
    • 相干瀏覽
    • Thanks

前言

今天瀏覽了1篇文章 《Android性能優(yōu)化(1)之啟動加速35%》挺不錯的,有興趣的可以去看下。

作者在文中為了定位啟動耗時的問題,使用了 TraceView。

之前知道但是1直沒用過這個工具,今天拭心和大家1起學(xué)習(xí)下它 (? ??_??)?。

TraceView 是甚么

TraceView 是 Android SDK 中內(nèi)置的1個工具,它可以加載 trace 文件,用圖形的情勢展現(xiàn)代碼的履行時間、次數(shù)及調(diào)用棧,便于我們分析。

trace 文件是 log 信息文件的1種,可以通過代碼,Android Studio,或 DDMS 生成。

使用 Android SDK 提供的工具可以生成很多 log 文件,便于我們分析當(dāng)前利用的內(nèi)存、布局等狀態(tài),下面是幾種文件的截圖:

shixinzhang

手機卡頓很多時候都是由于某個操作過于耗時,在茫茫代碼中查找首惡未免太過痛苦,這時候候就該體現(xiàn) TraceView 的價值了。

生成 trace 文件

生成 trace 文件有3種方法:

  1. 使用代碼
  2. 使用 Android Studio
  3. 使用 DDMS

1.使用代碼生成 trace 文件

  Debug.startMethodTracing("shixintrace");    //開始 trace,保存文件到 "/sdcard/shixintrace.trace"
    // ...
    Debug.stopMethodTracing();    //結(jié)束

代碼很簡單,當(dāng)你調(diào)用開始代碼的時候,系統(tǒng)會生產(chǎn) trace 文件,并且產(chǎn)生追蹤數(shù)據(jù),當(dāng)你調(diào)用結(jié)束代碼時,會將追蹤數(shù)據(jù)寫入到 trace 文件中。

下1步使用 adb 命令將 trace 文件導(dǎo)出到電腦:

adb pull /sdcard/shixintrace.trace /tmp

使用代碼生成 trace 方式的好處是容易控制追蹤的開始和結(jié)束,缺點就是步驟略微多了1點。

2.使用 Android Studio 生成 trace 文件

Android Studio 內(nèi)置的 Android Monitor 可以很方便的生成 trace 文件到電腦。

在 CPU 監(jiān)控的那欄會有1個鬧鐘似的的按鈕,未啟動利用時是灰色:

shixinzhang

啟動利用后,這個按鈕會變亮,點擊后開始追蹤,相當(dāng)于代碼調(diào)用 startMethodTracing:

shixinzhang

當(dāng)要結(jié)束追蹤時再次點擊這個按鈕,就會生成 trace 文件了。

生成 trace 后 Android Studio 自動加載的 traceview 圖形以下:

shixinzhang

從這個圖可以大概了解1些方法的履行時間、次數(shù)和調(diào)用關(guān)系,也能夠搜索過濾特定的內(nèi)容。

左上角可以切換不同的線程,這其實也是直接用 Android Studio 查看 trace 文件的缺點:沒法直觀地對照不同線程的履行時間。

鼠標(biāo)懸浮到黃色的矩形上,會顯示對應(yīng)方法的開始、結(jié)束時間,和自己占用和調(diào)用其他方法占用的時間比例:

shixinzhang

3.使用 DDMS 生成 trace 文件

DDMS 即 Dalvik Debug Monitor Server ,是 Android 調(diào)試監(jiān)控工具,它為我們提供了截圖,查看 log,查看視圖層級,查看內(nèi)存使用等功能,可以說是如今 Android Studio 中內(nèi)置的 Android Monitor 的前身。

雙擊 shift 彈出全局搜索,搜索 “Android Device Monitor”:

shixinzhang

或直接在 設(shè)置里設(shè)置 Android Device Monitor 的快捷鍵:

shixinzhang

打開 Android Device Monitor,在 DDMS 中打開 trace 文件,DDMS 會啟動 TraceView 加載 trace 文件:

shixinzhang

上圖介紹了 TraceView 的大致內(nèi)容:

  • 上半部份顯示了 不同線程的履行時間
    • 其中不同的色彩表示不同的方法
    • 同1個色彩越長,說明履行時間越久,如圖中的主線程 main
    • 空白表示這個時間段內(nèi)沒有履行內(nèi)容
  • 下半部份展現(xiàn)了不同方法的履行時間信息,關(guān)鍵指標(biāo)有3個:
    • Cpu Time/Call :該方法平均占用 CPU 的時間
    • Real Time/Call :平均履行時間,包括切換、阻塞的時間,>= Cpu Time
    • Calls + Recur Calls/Total :調(diào)用、遞歸次數(shù)

點擊下面的任意1個方法,可以看到它的詳細信息:

  • Parents:選中方法的調(diào)用途
  • Children:選中方法調(diào)用的方法

shixinzhang

根據(jù) TraceView 顯示內(nèi)容定位問題

定位問題時 TraceView 的使用方式:

  • 從上半部份查看哪些線程履行時間長?甚么時候開始履行?與主線程交錯時間?
  • 哪些方法的履行需要花費很長時間
    • 點擊 TraceView 中的 Cpu Time/Call,依照占用 CPU 時間從高到低排序
  • 哪些方法調(diào)用次數(shù)非常頻繁
    • 點擊 TraceView 中的 Calls + Recur Calls/Total ,依照調(diào)用次數(shù)從高到底排序

排序后,然后逐一排查是不是有項目代碼或依賴庫代碼,有的話點擊查看詳情,查看是這個方法還是調(diào)用的子方法的問題,進1步定位問題。

解決 DDMS 中的 TraceView 沒法搜索,find 沒法使用的問題

Traceview 中信息太多,想要查找可使用最下方的 find:

shixinzhang

但是目前 DDMS 中的 TraceView 有 bug,find 沒法使用,許多人給 Google 提 issue 提了 5 年也沒有解決 ╮(╯_╰)╭ :

shixinzhang
(圖片截自:https://code.google.com/p/android/issues/detail?id=38825)

解決辦法就是直接使用 SDK 中的 TraceView:

直接打開 SDK 中的 TraceView :

這里寫圖片描述

然后打開之前生成的 trace 文件:

shixinzhang

如果直接打開 traceview 有問題,可以通過命令行 traceview 打開:

shixinzhang

雖然提示 deprecated,但最少在搜索上還是比 Android Device Monitor 中好用。

TraceView 的使用處景

在發(fā)現(xiàn)某個頁面或操作會卡頓時,可使用 TraceView 定位問題代碼。

比如啟動,加載圖片列表卡頓等情況。

總結(jié)

Android SDK 中提供了許多工具幫助我們發(fā)現(xiàn)問題,在學(xué)會使用工具之余,還是要加強本身對性能要求的意識。

https://developer.android.com/training/articles/perf-tips.html

還有1點,不要過早優(yōu)化!

相干瀏覽

Android 性能優(yōu)化:使用 Lint 優(yōu)化代碼、去除過剩資源

Android 性能優(yōu)化:多線程系列開篇

歡迎掃描關(guān)注我的微信公眾號 安卓進化論,1起成為更優(yōu)秀的 programmer (? ??_??)? !

這里寫圖片描述

Thanks

https://developer.android.com/studio/profile/traceview.html
https://code.google.com/p/android/issues/detail?id=38825
http://www.cnblogs.com/sunzn/p/3192231.html
https://gold.xitu.io/post/5874bff0128fe1006b443fa0

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产亚洲视频在线播放大全 | 中国漂亮护士一级毛片 | 伊人网亚洲 | 久久一区二区三区不卡 | 在线观看亚洲欧美 | 亚洲第一色在线 | 国产三级视频在线 | 青青青青久久精品国产一百度 | 无码免费一区二区三区免费播放 | 国产综合久久久久久 | 亚洲不卡视频在线 | 一级毛片不卡片免费观看 | 日韩免费 | 毛片机地| 国产天堂网| 最新69国产成人精品视频69 | 最新国产一区二区精品久久 | 视频一区中文字幕 | 艹碰在线| 在线资源你懂的 | 亚洲色妞 | 免费在线观看视频a | 欧美日韩中文字幕一区二区高清 | 国产欧美久久久精品 | 欧美xxxx做受欧美人妖 | 在线观看视频亚洲 | 久夜色精品国产一区二区三区 | a爱爱视频| 一本本久综合久久爱 | 亚洲 欧美 日韩 综合aⅴ视频 | 国产毛片久久国产 | 中文字幕中文字幕中中文 | 高清一级做a爱过程免费视频 | 欧美精品一国产成人性影视 | 亚洲产国偷v产偷v自拍色戒 | yellow中文字幕官网是什么 | 最近韩国动漫hd免费观看 | 亚洲天堂免费在线视频 | 视频在线观看免费网址 | 欧美一级视频在线高清观看 | 久久久久国产精品免费 |