Android - 内存泄漏处理
来源:互联网 发布:sql 替换 编辑:程序博客网 时间:2024/05/16 17:23
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 处理内存泄漏的方式
- 处理内存泄漏
- 处理内存泄漏c++
- 内存泄漏的处理
- C++内存泄漏处理
- Android开发笔记(七十五)内存泄漏的处理
- android 内存泄漏处理办法(持续更新中)
- 【内存泄漏】Android内存泄漏---单例内存泄漏
- 【内存泄漏】Android内存泄漏---Handler
- Android 内存泄漏调试
- Android 内存泄漏调试
- Android 内存泄漏调试
- Android 内存泄漏调试
- Android 内存泄漏调试
- Android内存泄漏简介
- Android 内存泄漏调试
- Android 内存泄漏调试
- hdu3666(差分约束)
- 实验二 线性表的综合实验(c++)
- Android Studio如何修改已建好的API Version
- Qt之界面实现技巧
- 【LeetCode】C# 3、Longest Substring Without Repeating Characters
- Android - 内存泄漏处理
- 20_顺时针打印矩阵
- UVa1642 Magical GCD-(最大权值子段和->map)
- DES算法
- web和webApp如何实现上拉加载和下拉刷新
- 【TOMsInsight】碎片化信息的价值:懒惰与慰藉
- @ResponseBody注解的使用
- 统计元音字母
- 计蒜客-字符全排列