美文网首页
LeakCanary

LeakCanary

作者: David_zhou | 来源:发表于2020-06-01 10:50 被阅读0次

    缘起

    很早之前看过leakcanary的源码,应该是自己看的第一个框架源码,但当时知识不扎实,并没有吃透。最近看到分析这个框架的视频,于是记录下学习内容。

    基础知识

    四种引用
    1 强引用
    2 软引用,softReference,内存不够时回收。
    3 弱引用,weakReference GC时回收。

    引用队列 ReferenceQueue
    可以保存弱引用和软引用
    对象被回收时,JVM将这个引用放到与之相关联的引用队列中。

    流程

    1. 首先创建一个RefWatcher,启动一个activityRefWatcher。
    2. 通过activityLifecycleCallBack 将activity的onDestroy相关联。
    3. Activity onDestroy之后将它放在一个weakReference 中。
    4. 将这个reference放到一个ReferenceQueue中。
    5. 查看ReferenceQueue是否存在activity的引用。
    6. 如果该activity泄露了,dump出heap信息,然后分析泄露路径
    7. 在线程池中去开始分析内存泄露。

    OOM

    1 单例造成的内存泄露
    TODO: 将传入的context改成使用applicationcontext.
    2 非静态内部类创建静态实例造成的内存泄露。非静态内部类持有外部类对象,而静态变量的生命周期与应用的生命周期一致。
    TODO:非静态内部类改成静态内部类
    3 handler 造成的内存泄露
    TODO:1 将hanlder声明为静态,2 通过弱引用的方式引入activity
    4 线程造成的内存泄露
    TODO:静态内部类
    5 webview造成的内存泄露
    TODO:放在单独的进程,退出界面时及时销毁。

    相关文章

      网友评论

          本文标题:LeakCanary

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