美文网首页
解决Handler引起的内存泄漏

解决Handler引起的内存泄漏

作者: 谢尔顿 | 来源:发表于2017-11-21 18:30 被阅读10次

我们大多数人的写法如下所示:

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    };

在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用,而静态的内部类不会持有外部类的引用。
要解决这个问题,我们在继承Handler的时候,要么是放在单独的类文件中,要么直接使用静态内部类,当需要在静态内部类中调用外部的Activity的时候,我们可以直接采用弱引用进行处理,下面是我们修改后的代码:

    private static final class MyHandler extends Handler{
        private final WeakReference<MainActivity> mWeakReference;

        public MyHandler(WeakReference<MainActivity> mWeakReference) {
            this.mWeakReference = mWeakReference;
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            MainActivity activity = mWeakReference.get();
            if (activity != null){
                //开始写业务代码
            }
        }
    }

相关文章

网友评论

      本文标题:解决Handler引起的内存泄漏

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