使用Android Studio检测内存泄露
来源:互联网 发布:初学电钢琴推荐知乎 编辑:程序博客网 时间:2024/05/17 01:34
内存泄露,是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文件中添加,不同的编译使用不同的引用:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
在应用的Application onCreate方法中添加LeakCanary.install(this),如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
应用运行起来后,LeakCanary会自动去分析当前的内存状态,如果检测到泄漏会发送到通知栏,点击通知栏就可以跳转到具体的泄漏分析页面。
关于LeakCanary的更多分析可以查看这里。
- 使用Android Studio检测内存泄露
- 使用Android Studio检测内存泄露
- 使用新版Android Studio检测内存泄露和性能
- 使用新版Android Studio检测内存泄露和性能
- 使用新版Android Studio检测内存泄露和性能
- 使用新版Android Studio检测内存泄露和性能
- 使用新版Android Studio检测内存泄露和性能
- 如何在Android Studio中使用LeakCanary检测内存泄露
- 使用新版Android Studio检测内存泄露和性能
- 使用新版Android Studio检测内存泄露和性能
- Android Studio检测内存泄露和性能
- Android Studio检测内存泄露和性能
- Android Studio检测内存泄露和性能
- Android 使用LeakCanary 检测内存泄露
- Android 使用LeakCanary 检测内存泄露
- Android 使用LeakCanary 检测内存泄露
- Android 使用LeakCanary 检测内存泄露
- 使用leakcanary检测Android项目内存泄露
- MD5加密
- ios多语言、国际化
- Activity生命周期
- 6月20日
- 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- 使用Android Studio检测内存泄露
- Eclipse/Myeclipse 如何删除导入的配置文件(例如epf主题文件)
- Job定时触发
- centos 6.5 yum安装mysql5.6
- Spring注解详解
- form表单提交回调函数
- java的异常Exception
- Android应用程序开发以及背后的设计思想深度剖析
- 【Word】word2010中如何去掉标题前面的小黑点