ADB、Android Monitor、DDMS、Hierarc

作者: 芒果味的你呀 | 来源:发表于2017-09-14 15:56 被阅读249次

    ADB、Android Monitor、DDMS、HierarchyViewer、MAT、SysTrace、TraceView 性能分析工具使用大全


    ADB

    通过连接电脑和手机进行调试的debug工具,类似一个桥brige。所以全称为android debug bridge。

    官网链接 命令非常全!!!

    常用用法:

    1.mac上安装adb :

    打开终端
    输入命令:

    $ brew cask install android-platform-tools

    输入安装密码
    等待安装完成

    2.列举当前连接设备:

    $ adb devices

    3.打印logcat信息

    $ adb logcat

    4.有的时候程序发生了crash,但是androidstudio上没有error信息,此时我们可以用adb去查看:

    $ adb logcat | grep AndroidRuntime

    5.安装与卸载apk

    $ adb install ~/Downloads/mobileqq_android.apk
    $ adb uninstall xxx

    6.查看当前avtivity

    $ adb shell dumpsys activity | grep "mFocusedActivity"

    7.其他的查看官网说明官网链接


    Android Monitor

    详解看我之前写的这篇文章:Android性能分析工具--Android Monitor

    Android Device Monitor :DDMS、HierarchyViewer

    image.png

    DDMS -Dalvik Debug Monitor Server,这个工具提供了一个集成调试环境,使用起来更加方便。

    • Heap Viewer
      • 实时查看App分配的内存大小和空闲内存大小
      • 发现Memory Leaks(内存泄漏)
    image.png

    按上图的标记顺序按下,我们就能看到内存的具体数据,右边面板中数值会在每次GC时发生改变,包括App自动触发或者你来手动触发。

    image.png image.png image.png image.png image.png

    横坐标是对象的内存大小,这些值随着不同对象是不同的,纵坐标是在某个内存大小上的对象的数量

    对于内存泄漏,主要是指该释放的内存(没有gc引用)没有被释放掉,我们使用这个工具主要可以手动触发gc,那么如何检测是否内存泄漏呢?Heap Viewer中的数值会自动在每次发生GC时会自动更新,那么我们是等着他自己GC么?既然我们是来看内存泄漏,那么我们在需要检测内存泄漏的用例执行过后,手动GC下,然后观察data object一栏的total size(也可以观察Heap Size/Allocated内存的情况),看看内存是不是会回到一个稳定值,多次操作后,只要内存是稳定在某个值,那么说明没有内存溢出的,如果发现内存在每次GC后,都在增长,不管是慢增长还是快速增长,都说明有内存泄漏的可能性。

    • Allocation Tracker

    官网链接:https://developer.android.com/studio/profile/am-allocation.html
    Allocation Tracker用来跟踪内存分配,它允许你在执行某些操作的同时监视在何处分配对象,了解这>######些分配使你能够调整与这些操作相关的方法调用,以优化应用程序性能和内存使用。
    AS和DDMS中都有Allocation Tracker,androidstudio中的在Android性能分析工具--Android Monitor文章中内存检测 memory部分所讲述的第四个按钮,(Start Allocaton Tracking)开始分配追踪,第一次点击可以指定追踪内存的开始位置,第二次点击可以结束追踪的位置。这样我们截取了一段要分析的内存,等待几秒钟AndroidStudio会给我们打开一个Allocation视图.,具体点进文章链接。
    image.png
    ddms中如图
    image.png

    HierarchyViewer:ddms中的另一个好用的工具,层级查看器,使用非常简单,连接手机,到你想知道布局的页面,点击如图所示按钮,

    image.png

    接着会出现如图所示,会展示所有的布局。你可以看任何app的布局。


    image.png
    image.png

    MAT:Memory Analyzer Tool 内存快照分析工具

    使用MAT进行内存调试,要调试内存,首先需要获取HPROF文件,HPROF文件是MAT能识别的文件,HPROF文件存储的是特定时间点,java进程的内存快照。有不同的格式来存储这些数据,总的来说包含了快照被触发时java对象和类在heap中的情况。由于快照只是一瞬间的事情,所以heap dump中无法包含一个对象在何时、何地(哪个方法中)被分配这样的信息。
    Android性能分析工具--Android Monitor还是androidstudio 中android monitor memory内存检测的这个工具的第三个按钮(Dump Heap java),点击这个按钮的时刻,就在点击的时刻,将获取hprof文件(hprof文件也是我们使用MAT工具分析内存时经常使用的文件)若进行简单的数据分析用这个就可以,需要详细分析那么就得使用MAT工具.所以现在我们到了详细使用的mat工具,个人平时使用android studio自带的就可以,如果需要使用,可以自己查阅资料,本文主要是对这些工具有一个简单的了解,介绍。http://www.jianshu.com/p/d8e247b1e7b2参考链接


    SDK自带的内存分析工具

    TraceView能让我知道个个函数调用的CPU耗时,以及总CPU耗时等,方便排查优化。Systrace能够让我了解各个AP子模块的使用情况,同样利于瓶颈排查,性能优化工作等

    SysTrace

    Systrace允许你监视和跟踪Android系统的行为(trace)。它会告诉你系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至你可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供给你建议的解决方案。
    Systrace分为三个部分:
    1.内核部分:Systrace以Linux Kernel的ftrace为基础。
    2.数据采集:Android定义的Trace类,提供了把信息输出到ftrace的功能。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
    3.数据生成:SDK提供了systrace.py用来收集ftrace统计数据并生成一个结果网页文件供用户查看。
    通过命令行启动:

    $ cd android-sdk/platform-tools/systrace
    $ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

    TraceView

    TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。二者的用法如下:
    开发者在一些关键代码段开始前调用 Android SDK 中 Debug 类的 startMethodTracing 函数,并在关键代码段结束前调用 stopMethodTracing 函数。这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是 Java 线程)的函数执行情况,并将采集数据保存到 /mnt/sdcard/ 下的一个文件中。开发者然后需要利用 SDK 中的 TraceView 工具来分析这些数据。
    这个工具的使用其实就是我们文章前面说的Allocation Tracker的使用,按钮 Start Method Profiling(开启方法分析)和点击
    Stop Method Profiling(停止方法分析)后生成的xx.trace文件分析页面即为TraceView 。


    给个赞鼓励一下吧~

    相关文章

      网友评论

      • kevin_nazgul:>对于内存泄漏,主要是指该释放的内存(没有gc引用)没有被释放掉

        这句是有问题的,内存泄漏指的是应该被释放而没有被释放的内存。如果对话没有引用的话,那它肯定会被回收的,所以不是内存泄漏。
      • ec2612df5cb8:HierarchyViewer功能下面的Activity层级得eng/userdebug手机,才能显示吧??
        芒果味的你呀:是的 需要选中你的手机 再截取
      • ec2612df5cb8:写的不错,赞
        芒果味的你呀:@ec2612df5cb8 谢谢:blush:

      本文标题:ADB、Android Monitor、DDMS、Hierarc

      本文链接:https://www.haomeiwen.com/subject/ltulsxtx.html