极度舒适系列:LeakCanery

127 阅读1分钟

LeakCanery是什么

一款内存监测工具,分析内存泄漏原因。

需要了解的知识点

  • application监听android的onDestroy方法

    registerActivityLifecycleCallbacks

  • 弱引用

    gc的时候会被回收

  • ReferenceQueue

    存放回收的弱引用

实现思路

  • 内存泄漏是因为回收的对象被gcRoot引用,不能释放内存
  • 弱引用gc能够回收掉,那么只要把activity封装到弱引用中,判断下是否gc的时候被回收了,就能证明是否内存泄露了。

实现过程

  • 封装activity弱引用
  • 自己维护弱引用数组
  • 通过ReferenceQueue,去除数组中已经被回收的弱引用
  • 手动gc,去除数组中已经被回收的弱引用,防止判断错误
  • 分析dump

参考链接

LeakCanary,100行代码写出自己的内存泄露监测工具

本系列想帮助大家看源码不会那么恶心,看完之后再看其他文章和源码会好一点,该吐还是要吐的(手动滑稽)

0 (1).jpeg