美文网首页
LeakCanary工作原理解析

LeakCanary工作原理解析

作者: 陨落凡间的星灵 | 来源:发表于2019-04-11 10:47 被阅读0次

简介

 LeakCanary是一款开源的内存泄露检测工具,可以用来检测项目中的Activity是否能够被GC及时回收。

使用方式

在项目的build.gradle文件添加:

dependencies {

     debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.3'

     releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'

}

然后在Application中调用install方法:

public class MyApplication extends Application {

      @Override

      public void onCreate() {

            super.onCreate();

            LeakCanary.install(this);

      }

}

LeakCanary.install()方法大致流程:

LeakCanary.install() -->  创建RefWatcher --> 创建ActivityRefWatcher --> watchActivities() --> 注册Activity生命周期回调

当生命周期回调onActivityDestroyed的时候,触发ActivityRefWatcher的onActivityDestroyed调用:

ActivityRefWatcher.onActivityDestroyed() --> RefWatcher.watch() --> 在watch方法内部,通过关注的activity的引用、随机生成的key值、一个引用队列ReferenceQueue,  来构建一个KeyedWeakReference 弱引用对象。同时,将key加入retainedKeys集合。

watch方法

接着采用异步的方式--- ensureGone() , 来检测该activity是否能被GC回收

ensureGone方法

ensureGone方法内部2个核心方法:removeWeaklyReachableReferences() 和 gone() .

知识补充: 使用引用队列ReferenceQueue来创建WeakReference对象,当WeakReference所引用的Object,在某一时刻变为“弱可达” (JVM规定的可GC回收状态)的时候,对此Object的弱引用会被清除,同时该WeakReference会入队ReferenceQueue中。

removeWeaklyReachableReferences方法,就是通过遍历取出ReferenceQueue中的KeyedWeakReference,来判定其所引用的activity是已达到GC可回收状态,同时将对应的key从retainedKeys集合中移除。后续通过调用gone方法,返回ture,说明如果该key已经不在retainedKeys集合中,说明key对应的activity已达可回收状态,没有内存泄露风险。

否则,会手动触发一次系统GC,再尝试一次刚才的判断流程。如果gone方法仍然返回false,说明已经存在内存泄露风险,将会dump当前堆内存情况,将dump file交给HeapAnalyzerService来分析:

HeapAnalyzerService

最终通过 HeapAnalyzer.checkForLeak() 来 计算出 activity实例  到GC roots的最短强引用路径。

计算到GC roots的最短路径

相关文章

  • LeakCanary工作原理解析

    简介 LeakCanary是一款开源的内存泄露检测工具,可以用来检测项目中的Activity是否能够被GC及时回收...

  • LeakCanary 工作原理浅析

    参考链接Java内存问题 及 LeakCanary 原理分析LeakCanary 工作原理浅析 通过 appli...

  • LeakCanary 解析收获

    此文只做笔记使用,不做系统解析LeakCanary有关于LeakCanary的原理部分: 1.APP每次启动都会单...

  • 2020-12-09

    LeakCanary工作原理和源码解析 内存泄漏一直以来就是Android APP需要着重解决的点,而LeakCa...

  • LeakCanary原理解析

    简介 LeakCanary是一款开源的内存泄漏检查工具,在项目中,可以使用它来检测Activity是否能够被GC及...

  • LeakCanary原理解析

    相信很多人知道LeakCanay是square公司出的一个内存泄漏检测开源库,其使用也非常简单,在Applicat...

  • Leakcanary原理使用解析

    Getting Started 在build.gradle: application BaseActivity 更...

  • Leakcanary原理解析

    1. 前言 LeakCanary是Android内存泄漏的框架,作为一个“面试常见问题”,它一定有值得学习的地方,...

  • 不是很深入的分析LeakCanary2.0

    Leakcanary2.0 Leakcanary 使用 原理 Reference 、ReferenceQueue ...

  • LeakCanary 内存泄漏原理完全解析

    LeakCanary 的工作原理是什么?跟我一起揭开它的神秘面纱。 一、 什么是LeakCanary LeakCa...

网友评论

      本文标题:LeakCanary工作原理解析

      本文链接:https://www.haomeiwen.com/subject/xcsziqtx.html