美文网首页android内存管理
android内存泄漏快速解决——案例

android内存泄漏快速解决——案例

作者: 朱_c713 | 来源:发表于2020-01-15 15:16 被阅读0次

在开发PlayergsyVideoPlayer 的时候,我们重写了OrientationEventListener 。但是使用leakCanary检测还是发现有内存泄漏

泄漏日志为持有上层activity。

场景代码:


public static class MyOrientationEventListener  extends OrientationEventListener {

WeakReference softReference;

    Activity innerActivity;

    private GSYBaseVideo PlayergsyVideoPlayer;

    public MyOrientationEventListener(Context context, OrientationRewriteUtils orientationRewriteUtils) {

super(context);

        softReference =new WeakReference<>(orientationRewriteUtils);

        innerActivity =softReference.get().mActivity;

        gsyVideoPlayer =softReference.get().gsyVideoPlayer;

    }

问题浮现:已经改成这种静态外部类形式了,为什么还会有内存泄漏?

通过leakCannary 泄漏的地方在innerActivity

正确的写法是:


public static class MyOrientationEventListenerextends OrientationEventListener {

WeakReferencesoftReference;

    public MyOrientationEventListener(Context context, OrientationRewriteUtils orientationRewriteUtils) {

super(context);

        softReference =new WeakReference<>(orientationRewriteUtils);

    }

接下来在类的内部:

在用到innerActivity的地方:用softReference.get().mActivity 替代;

在用到PlayergsyVideoPlayer的地方:用softReference.get().gsyVideoPlayer 替代;

构造方法里不能出现非弱引用的对象的实例化。

实测后,泄漏消失。
Android内存泄漏解决(总)

相关文章

网友评论

    本文标题:android内存泄漏快速解决——案例

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