Android - 内存泄漏处理
2017-10-07 14:20
211 查看
Memory leak(内存泄漏)
虽然说Java由垃圾回收机制,但是由于代码不规范,编码不成熟,业务逻辑混杂等原因,在使用Java编程的过程中,例如Android应用开发,也会碰到内存泄漏的情况,很多情况下会导致四大组件对象无法回收,对于业务大一点的应用,可能会导致一整个页面内存泄漏。我在工作中也碰到过内存泄漏,记得第一次解决的时候,还是开代码的,后来发现后很多强大的工具,担心太久忘记了,就写下简单的步骤记录下。Memory leak Analysis Tools
以下将以Android Studio为例,相信大部分的Android开发都已经使用Android Studio了。Memory Monitor(内存监视器)
Android Studio提供了内存监控和检测的相关工具:默认打开Android Studio后,底部会由几个tab,其中一个Android Profiler(Android Studio 3.0),选中就可以看到上述图片所示的样子。(当然你这时开启一个模拟器,并打开一个应用)
如果在Android Studio面板中没有找到,通过菜单栏-》View-》Tool Windows-》Android Profiler即可打开窗口(Mac)。
Android Profiler显示三个指标数据,CPU,MEMORY,NETWORK,点击对于的指标有惊喜:
具体关于Android Profiler工具介绍请看:Android Profiler
注:有机会翻译一把
HPROF Viewer and Analyzer
HPROF文件查看与分析HPROF具体是什么文件就叙述,直接将如何使用。很明显,内存泄漏是,如果创建了一个Java对象,然后没有及时释放,取消引用,或者在Java虚拟机GC时,发现无法回收该对象,导致内存占用越来越多。怎么确认应用中释放存在内存泄漏呢?当然有工具:Leak Canary,有兴趣的同学可以自行了解,目前项目中就有在用,还是蛮强大的,自动帮你检测。
当工具检测到内存泄漏,或者没有工具时,这时怎么办呢?很显然,开发中一个页面会使用Activity/Fragment,当我们离开这个页面后,发现这个Activity/Fragment还在内存中,说明内存泄漏了,其他对象泄漏也一样。
比如说:制造一个内存泄漏
// TODO
MAT(Memory Analysis Tools)
接下来就讲下MAT内存泄漏分析,是之前的一个例子:1, 打开Eclipse
2, 打开内存分析工具或直接打开HPROF,如果是通过Android Studio获取的文件,需要使用工具转以下,具体后面补充:
相关文章推荐
- Android 处理内存泄漏的方式
- android中mvp+retrofit+rxjava处理mvp内存泄漏整合的demo
- android 内存泄漏处理办法(持续更新中)
- Android内存泄漏处理机制
- Android-浅析Android消息处理机制使用不当造成的内存泄漏
- Android性能优化——常见的内存泄漏及处理方法
- android加载字体内存泄漏的处理方法
- Android开发笔记(七十五)内存泄漏的处理
- android webview处理加载超时
- Android 内存泄漏查找方法
- Android 以Dialog的方式显示Activity,并且处理背景四个角为圆角,去掉黑角
- 【Android应用开发技术:图像处理】章节列表
- [Android] 图像处理整合之处理ColorMatrix和Intend传递路径显示图像
- android Context 使用,防止内存泄漏
- Android 中如何处理双击事件
- android studio clean project失败时的处理方法
- Android Bitmap 图片处理细节
- Android 内存泄漏案例和解析
- Delphi处理Android的路径信息
- [Android] 异步消息处理机制(Handler 、 Looper 、MessageQueue)源码解析