LeakCanary Github :https://github.com/square/leakcanary
使用: 使用的时候按照官方的配置来就行。然后需要我遇到的坑主要是在 application 初始化的时候会报类转换异常。后来查找资料是因为 Application 的 oncreate 会调用多次,如果你在 onCreate 中有启动服务的操作,要先判断启动的进程不是不是你的 app,方法百度的话会有很多。
常见的内存泄漏案列
- 单例中持有 Acitivity 或者 Activity 的成员变量
单例中如果持有 Activity 或者 Activity 的成员变量,那么在 Activity 生命周期结束之后,是无法回收的,因为你还持有它的引用,我使用的解决方法是:在 Activity 中的生命周期结束的时候,单例中提供一个释放引用的方法,在 onDestory 中调用,防止继续持有该 Activity 的引用。
- Handler 的发送消息未完成,Activity 生命周期结束。
Handler 和 Meassge 的使用频率非常高,Android 有一个 Looper 一直会轮询 MessageQueue 中的消息然后处理,假设你在 Activity 销毁前使用 handler 发送了消息,但是 Looper 没有处理完成,此时 Acitivity 同样是被占用着,无法回收的,所以在 onDestroy 里面要记得清空 Handler 的任务和消息栈。
目前值遇到了上述两种内存泄漏的例子,后续发现后会补充到这里。LeakCanary 确实很好用。 :)
网友评论