Android内存DEBUG之Android Profiler&Android LeakCanary工具的使用

作者 by adtxl / 2021-12-20 / 暂无评论 / 447 个足迹

1. Android Profiler

Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。
使用方法也可参考:https://developer.android.com/studio/profile/memory-profiler?hl=zh-cn
本文简单记录实际使用的示例

1.1 使用

1.1.1 打开

使用如下方式打开Profiler

image.png

或者从Android Studio的安装目录中打开单独的Profiler应用

image1c1723584e6046e9.png

如下所示

image79482b67411f7f8f.png

1.1.2 连接adb

如果您通过 USB 连接了某个设备但系统未列出该设备,请确保您已启用 USB 调试。如果您使用的是 Android 模拟器或已取得 root 权限的设备,Android Profiler 将列出所有正在运行的进程,即使这些进程可能无法调试也会列出。当您启动可调试的应用时,默认情况下会选择该进程。

使用adb 连接开发板

adb connect <ip_addr>  

1.1.3 新建一个session

image2d4ff341014357b0.png
会显示CPU、内存、网络和能耗四个东西,
imagee416027acaef1f22.png

1.1.4 分析

点击内存,进入内存详细使用界面,可以使用左侧的功能来捕获堆转储,堆转储显示在您捕获堆转储时您的应用中哪些对象正在使用内存,选择按包名排序
imaged7b1c4822be8f558.png
完成后会自动显示,可以选择我们自己的程序,查看时哪些对象在使用内存。
imagefe46fe48ceb1bffa.png

Heap Dump 右边四列的意思分别如下,一般情况下,如果Shallow Size和Retained Size都非常小并且相等,都可以认为是已经被回收的对象。

  • Allocations:Java堆中的实例个数
  • Native Size:native层分配的内存大小。
  • Shallow Size:Java堆中分配实际大小
  • Retained Size:这个类的所有实例保留的内存总大小(并非实际大小)

我们点击instance list中的对象,会在右侧显示这个instance的detail信息
image24b5d371466e28a9.png

Reference显示对这个对象的引用
image242a276449a2358f.png

2. Android LeakCanary

直接参考:https://square.github.io/leakcanary/

独特见解