内存泄漏场景,以及开发过程如何避免内存泄漏。
判断
A引用B,A的生命周期长于B。
Handler导致内存泄漏:Handler消息还没有发送完毕,Activity被销毁了,此时Activity无法被即时回收。
解决方法:Activity的onDestory()移除所有消息handler.removeCallbacksAndMessagers(null)
线程导致内存泄漏:子线程在耗时操作,内部类持有外部类隐士引用。当Activity被销毁了,子线程还在执行,Activity无法被回收。
解决办法:使用静态内部类,再使用弱引用保存Context。
单例导致泄漏:单例对象引用Activity上下文,单例的生命周期比它长。
解决办法:上下文如果是Application,将和单例生命周期相同,不存在内存泄漏。
静态集合导致泄漏:静态集合添加的对象,添加之后该集合一直引用该对象,无法释放。
解决方法,使用完该集合,清空集合
Stream未关闭导致内存泄漏:JVM无法通过垃圾回收来释放这些资源。
解决办法:使用完流即时关闭流。
其他原因导致内存泄漏:Service为解除绑定,broadcastReceiver未解除注册,EventBus未解除绑定
网友评论