使用Android Studio检测内存泄露(LeakCanary)

 更新时间:2016年12月01日 15:41:39   作者:zxc123e  
本篇文章主要介绍了用Android Studio检测内存泄露的问题的解决方法,Android Studio在为我们提供了良好的编码体验的同时,也提供了许多对App性能分析的工具,下面我们一起来了解一下。

内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁千里之堤的蚁穴。 怎么才能检测内存泄露呢?
AndroidStudio 中Memory控件台(显示器)提供了一个内存监视器。我们可以通过它方便地查看应用程序的性能和内存使用情况,从而也就可以找到需要释放对象,查找内存泄漏等。

熟悉Memory界面

打开日志控制台,有一个标签Memory ,我们可以在这个界面分析当前程序使用的内存情况。

运行要监控的程序(APP)后,打开Android Monitor控制台窗口,可以看到Memory控制台。 点击Memory控制台上Enable按钮,Memory控制台开始显示正在运行时程序的Memory使用情况。如上图中显示:

AndroidStudio Memory的功能:

  • 启动与关闭Memory监测按钮
  • 手动触发GC按钮
  • dump java heap 按钮,点击Android Studio就开始干活了,成功后会自动打开 hprof文件。
  • start(stop) allocation tracking按钮先点击一次,然后会看到Memory Recorder开始转动,然后自己开始在APP上面做相应的操作。在合适的时间再点一次,结束记录。

如何检测内存泄露

我们点击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会自动去分析当前的内存状态,如果检测到泄漏会发送到通知栏,点击通知栏就可以跳转到具体的泄漏分析页面。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 快速调试Android应用系统修改ro.debuggable属性的两种方式

    快速调试Android应用系统修改ro.debuggable属性的两种方式

    这篇文章主要为大家介绍了快速调试Android应用系统修改ro.debuggable属性的两种方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • android自定义gradle插件并且发布到本地仓库详细教程

    android自定义gradle插件并且发布到本地仓库详细教程

    这篇文章主要介绍了android自定义gradle插件并且发布到本地仓库详细教程的相关资料,需要的朋友可以参考下
    2023-07-07
  • 如何给Flutter界面切换实现点特效

    如何给Flutter界面切换实现点特效

    这篇文章主要给大家介绍了关于如何给Flutter界面切换实现点特效的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Android编程实现Home键的屏蔽,捕获与修改方法

    Android编程实现Home键的屏蔽,捕获与修改方法

    这篇文章主要介绍了Android编程实现Home键的屏蔽,捕获与修改方法,实例分析了使用onAttachedToWindow捕获Home键的相关技巧,需要的朋友可以参考下
    2016-06-06
  • Android大图监测系统的三种实现方式

    Android大图监测系统的三种实现方式

    在Android应用中,大图的加载和显示可能导致内存占用过高,进而引发OOM(Out Of Memory)异常,影响应用的稳定性和用户体验,为了更好地管理大图资源,我们需要建立起一套可靠的大图监测系统,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • Android webview加载https链接错误或无响应的解决

    Android webview加载https链接错误或无响应的解决

    这篇文章主要介绍了Android webview加载https链接错误或无响应的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • SurfaceView播放视频发送弹幕并实现滚动歌词

    SurfaceView播放视频发送弹幕并实现滚动歌词

    这篇文章主要为大家详细介绍了SurfaceView播放视频发送弹幕并实现滚动歌词,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android 开发照相功能实例详解

    Android 开发照相功能实例详解

    这篇文章主要介绍了Android 开发照相功能实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android 动态改变布局实例详解

    Android 动态改变布局实例详解

    这篇文章主要介绍了Android 动态改变布局实例详解的相关资料,这里举例说明如何实现动态改变布局的例子,帮助大家学习理解,需要的朋友可以参考下
    2016-11-11
  • Android实现自动轮询的RecycleView

    Android实现自动轮询的RecycleView

    这篇文章主要为大家详细介绍了Android实现自动轮询的RecycleView,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10

最新评论