华为手机 Leak android.gestureboost.GestureBoostManager内存泄露解决

  1. 再用华为手机测试的时候leakcanary,老是提示GestureBoostManager,这个类的mContext引用当前Activity,导致的内存泄露。
device-2017-05-27-152211.png

于是翻阅源码,也没有找到这个类,看来应该是EMUI里面的类,可惜EMUI应该没有开源,所以也看不了源码,那么该如何解决这个内存泄露呢?说起来也简单,只要将这个类引用我们的Activity给去掉,内存泄露不就解决了嘛。

首先GestureBoostManager,我们无法主动的调用相关api方法,断开这个引用,所以只能使用反射,将这个引用剪掉!

上代码:

 /**
     * 修复华为手机内存的泄露
     */
    public void fixHuaWeiMemoryLeak(){
        //测试
        try {
            Class<?> GestureBoostManagerClass = Class.forName("android.gestureboost.GestureBoostManager");
            Field sGestureBoostManagerField = GestureBoostManagerClass.getDeclaredField("sGestureBoostManager");
            sGestureBoostManagerField.setAccessible(true);
            Object gestureBoostManager = sGestureBoostManagerField.get(GestureBoostManagerClass);
            Field contextField = GestureBoostManagerClass.getDeclaredField("mContext");
            contextField.setAccessible(true);
            if (contextField.get(gestureBoostManager)==this) {
                contextField.set(gestureBoostManager, null);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (Throwable t) {
            t.printStackTrace();
        }

    }

注意:为了保险起见,我们可以在自己的BaseActivity的onDestroy()方法里面,剪掉这个引用,再减掉之前,添加了一个判断GestureBoostManager是否引用当前的Activity,如果是,那就立马剪掉,否者的话,咱就不处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,391评论 0 12
  • 性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...
    JackChen1024阅读 1,336评论 1 20
  • 配方: 荷叶3g 决明子3.2g 茯苓2g 山楂1.8g 桑叶2.5g 火麻仁2.8g 使用方法: 每幅...
    leook阅读 469评论 0 0
  • 文 | 潘俊宏 从第一篇文字到今天,整整一个月时间过去了,仅仅只写了两篇,还不到五千字。与当时的雄心壮志豪言壮语比...
    潘俊宏阅读 471评论 13 21