安卓日记Handler的内存泄漏

作者: 莫不如哦 | 来源:发表于2017-07-14 21:06 被阅读0次

Handler大家都在用,用来线程的通信,实现异步间的信息传递
handler有个小坑 不优化的话 会引起内存泄漏
要从handler机制说起,Android中UI线程也就是主线程建立时,会进行一个Looper.prepare()的方法,每个looper对应一个线程,这是一个类似轮询器的玩意儿,这个东西会不停地去轮询Messagequeue消息队列,取出处于队列头部的消息,发送给相应的线程
大体的一个机制就是这样,然后问题就出在了消息队列这一块,handler发送消息,不是说发送一个就完事,要不然也就用不到消息队列了,假设这样一个情况,消息队列中有五个消息,都是由子线程发送给主线程的,主线程在处理了两个消息之后被用户关闭了,这是很有可能的一个情况,activity关闭是关闭了 但是这个时候handler还持有着activaty的引用,这就会导致activity的内存回收不了,出现内存泄漏
具体优化方法如下 简单的加一个软引用

 static class LoadDataHandler extends Handler {
        private SoftReference<MainActivity> activitySRF = null;

        public LoadDataHandler(MainActivity activity) {
            activitySRF = new SoftReference<>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // 因为Handler是异步的,存在退出当前类之后才接收到handler消息的情况,
            // 并且软引用持有的对象会在堆内存不足时存在被回收的可能,所以这里需要判空处理
            if (null == activitySRF || null == activitySRF.get()) {
                return;
            }
            switch (msg.what) {
                case 0: {
                    activitySRF.get().mUserNameTxt.setText("123");
                }
                break;
                default:break;
            }
        }
    }

相关文章

  • (转载自diycode)2017 Android 面试题分享整理

    Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 An...

  • android学习资料

    第一部分: Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析...

  • Android知识体系总结

    第一部分:Android(安卓)Android基础知识Android内存泄漏总结Handler内存泄漏分析及解决H...

  • 安卓日记Handler的内存泄漏

    Handler大家都在用,用来线程的通信,实现异步间的信息传递handler有个小坑 不优化的话 会引起内存泄漏要...

  • Handler

    目录 什么是Handler 使用方式 源码解析 内存泄漏问题 1. 什么是Handler 安卓线程间的一种通信机制...

  • java基础

    Handler怎样防止内存泄漏 handler引起内存泄漏的原因:由于handler的写法问题,如果handler...

  • android 内存性能

    handle引起的内存泄漏 强引用资源引起的内存泄漏 线程导致的内存泄漏 系统学习安卓内存泄露 large hea...

  • 安卓内存泄漏

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • [安卓开发日记] 内存泄漏

    一、JAVA的四种引用类型 1.强引用 这类通常的实例化对象 2.弱引用 WeakReference 当JVM进...

  • 源码探索系列1---Handler与HandlerLeak的那些

    开始学安卓的时候,我对一些异步操作都是用Handler和AsyncTask的。 现在那个Handler被挂上了泄漏...

网友评论

    本文标题:安卓日记Handler的内存泄漏

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