Koom内存检测之Activity Leak

{
    "gcRoot": "Global variable in native code",
    "instanceCount": 1,
    "leakReason": "Activity Leak",
    "path": [
        {
            "declaredClass": "java.lang.ClassLoader",
            "reference": "dalvik.system.PathClassLoader.runtimeInternalObjects",
            "referenceType": "INSTANCE_FIELD"
        },
        {
            "declaredClass": "java.lang.Object[]",
            "reference": "java.lang.Object[]",
            "referenceType": "ARRAY_ENTRY"
        },
        {
            "declaredClass": "com.android.sohu.sdk.common.toolbox.ToastUtils",
            "reference": "com.android.sohu.sdk.common.toolbox.ToastUtils.mCheckNotification",
            "referenceType": "STATIC_FIELD"
        },
        {
            "declaredClass": "androidx.toast.CompatToast",
            "reference": "androidx.toast.CompatToast.toastView",
            "referenceType": "INSTANCE_FIELD"
        },
        {
            "declaredClass": "android.view.View",
            "reference": "android.widget.LinearLayout.mContext",
            "referenceType": "INSTANCE_FIELD"
        },
        {
            "reference": "com.sohu.sohuvideo.ui.GuideActivity",
            "referenceType": "instance"
        }
    ],
    "signature": "58be8ff8a88de8ab9f756ab4b261466deb6f87"
}

ClassLoader的实例字段Object数组中,有个元素存的是ToastUtils的类对象,ToastUtils的静态字段引用了CompatTost实例,CompatToast引用了View,View中引用了Context。
这一系列的引用,导致GuideActivity一直被引用着,释放不掉。

这是一个典型的static导致Context泄漏的问题

解决泄漏的最简单办法,就是在合适时机把引用链断开,具体在哪里断怎么断就需要根据业务分析了。

在这里,我选择了,activity销毁的时候,把CompatToast和View直接的引用断开,就是把toastView设置为null。这样做也是合理的,Activity不存在,View也不应该存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值