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