本篇文章主要介绍了用 Android Studio 检测内存泄露的问题的解决方法,Android Studio 在为我们提供了良好的编码体验的同时,也提供了许多对 App 性能分析的工具,下面我们一起来了解一下。
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
内存泄露,是 Android 开发者最头疼的事。可能一处小小的内存泄露,都可能是毁千里之堤的蚁穴。 怎么才能检测内存泄露呢?
AndroidStudio 中 Memory 控件台(显示器)提供了一个内存监视器。我们可以通过它方便地查看应用程序的性能和内存使用情况,从而也就可以找到需要释放对象,查找内存泄漏等。
熟悉 Memory 界面
打开日志控制台, 有一个标签 Memory , 我们可以在这个界面分析当前程序使用的内存情况。
运行要监控的程序(APP)后,打开 Android Monitor 控制台窗口,可以看到 Memory 控制台。 点击 Memory 控制台上 Enable 按钮,Memory 控制台开始显示正在运行时程序的 Memory 使用情况。如上图中显示:
AndroidStudio Memory 的功能:
如何检测内存泄露
我们点击 dump Java heap 这个按钮,APP 会 Freeze 住。大概几十秒后,
dump 成功后会自动打开 hprof 文件。
如果我们想了解内存分配更详细的情况, 可以使用 Allocation Traker 来查看内存到底被什么占用了。 点击 Starg Allocation Tracking 按钮。开始分配追踪,过一些时间后,点击 Stop Allocation Tracking 结束追踪的位置。停止追踪后 .alloc 文件会自动打开。
当你想查看某个方法的源码时, 右键选择的方法, 点击 Jump to source 就可以了。
使用 LeakCanary
LeakCanary 是 square 公司推出的一款简单粗暴的检测内存泄漏的工具。
LeakCanary 会检测应用的内存回收情况,如果发现有垃圾对象没有被回收,就会去分析当前的内存快照,也就是上边 MAT 用到的. hprof 文件,找到对象的引用链,并显示在页面上。这款插件的好处就是, 可以在手机端直接查看内存泄露的地方, 可以辅助我们检测内存泄露。
使用:
在 build.gradle 文件中添加,不同的编译使用不同的引用:
- dependencies {
- debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
- releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
- }
在应用的 Application onCreate 方法中添加 LeakCanary.install(this),如下:
- public class ExampleApplication extends Application {
- @Override public void onCreate() {
- super.onCreate();
- LeakCanary.install(this);
- }
- }
应用运行起来后,LeakCanary 会自动去分析当前的内存状态,如果检测到泄漏会发送到通知栏,点击通知栏就可以跳转到具体的泄漏分析页面。
来源: http://www.phperz.com/article/17/0315/310626.html