LeakCanery是什么
一款内存监测工具,分析内存泄漏原因。
需要了解的知识点
-
application监听android的onDestroy方法
registerActivityLifecycleCallbacks
-
弱引用
gc的时候会被回收
-
ReferenceQueue
存放回收的弱引用
实现思路
- 内存泄漏是因为回收的对象被gcRoot引用,不能释放内存
- 弱引用gc能够回收掉,那么只要把activity封装到弱引用中,判断下是否gc的时候被回收了,就能证明是否内存泄露了。
实现过程
- 封装activity弱引用
- 自己维护弱引用数组
- 通过ReferenceQueue,去除数组中已经被回收的弱引用
- 手动gc,去除数组中已经被回收的弱引用,防止判断错误
- 分析dump
参考链接
LeakCanary,100行代码写出自己的内存泄露监测工具
本系列想帮助大家看源码不会那么恶心,看完之后再看其他文章和源码会好一点,该吐还是要吐的(手动滑稽)