FastgrabCongigReader 华为P9 内存泄漏

最近有个泄漏很诡异,来自华为 P9

泄漏日志:

static android.rms.iaware.FastgrabCongigReader.mFastgrabCongigReader
references android.rms.iaware.FastgrabCongigReader.mContext
...

借用一张泄漏图:


image
image

LoginActivity设置给了,导致LoginActivity被静态变量持有无法释放

  • 分析一下原因,无外乎静态成员变量mFastgrabConfigReader持有的mContext ,这里引用了上下文,导致Activity无法释放掉。只要释放掉就可以了
  • 但是,找到对应类发现FastgrabCongigReader并没有用到,泄漏的Activity中也没有mFastgrabCongigReader相关代码,猜测是系统的锅。
  • 解决:在Activity销毁回调中,通过反射进行置空即可。
public void fixMemoryLeak() {
        if (!"HUAWEI".equalsIgnoreCase(Build.MANUFACTURER)) {
            return;
        }

        try {
            Class<?> FastgrabConfigReaderClass = Class.forName("android.rms.iaware.FastgrabConfigReader");
            Field mFastgrabConfigReader = FastgrabConfigReaderClass.getDeclaredField("mFastgrabConfigReader");
            mFastgrabConfigReader.setAccessible(true);

            Object fastgrabConfigReader = mFastgrabConfigReader.get(FastgrabConfigReaderClass);
            Field contextField = FastgrabConfigReaderClass.getDeclaredField("mContext");
            contextField.setAccessible(true);

            if (contextField.get(fastgrabConfigReader) == this) {
                contextField.set(fastgrabConfigReader, null);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 5,561评论 0 8
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    apkcore阅读 4,997评论 2 7
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 7,038评论 0 12
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    DreamFish阅读 4,216评论 0 5
  • ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,...
    lovelycai阅读 33,102评论 6 18

友情链接更多精彩内容