背景
最近的项目总是遇到运行一个晚上后出现自动退出的问题,从日志分析是系统将应用进程杀掉了,由于ROM本身是我们基于Android7.1定制的,里面加了WatchDog,所以很有可能是由于应用某些异常导致整个系统卡死,从而引起了看门狗程序将应用杀掉,最有可能的原因就是应用程序内存的问题引起的【ROM本身放开了应用获取内存和存储空间的限制】,所以抽时间对整个应该进行了内存排查,发现了很多问题点,这里就列举其中遇到内存泄漏问题。
内存泄漏
现象
内存泄漏的现象就是经过某些操作或者程序运行一段时间后,整个应用程序占用的内存持续增加,并且GC无法回收这些分配出去的内存。
原因
内存泄漏的根本原因是由于引用关系处理不当导致的,当我们在写程序时,由于疏忽或者是对某些资源处理不当,造成了本应该被回收释放的资源没有得到正确的释放,从而造成我们的应用暂用的内存不断增加,最终程序变得卡顿,OOM,被系统杀死等。
常见引起内存泄漏的案例
- 非静态内部类、匿名内部类
- 静态的View
- Handler
- 监听器(各种需要注册的Listener,Watcher等)
- 资源对象没关闭造成内存泄漏
- 属性动画
- RxJava
- WebView
- 其他的系统控件以及自定义View

本文介绍了Android应用中出现内存泄漏的问题,包括泄漏的现象、原因,如非静态内部类、静态View、Handler等常见泄漏案例。同时,讲解了强引用、软引用、弱引用和虚引用的区别,并推荐了leakcanary和MAT等排查工具,帮助开发者进行内存优化。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



