handler匿名写法的问题

作者: 奔跑的佩恩 | 来源:发表于2017-12-02 15:25 被阅读149次

前言

handler是我们熟悉不过的了,最近在写handler时出现了一个问题,虽然功能实现,但是在代码的展示上总有那么点别扭,下面就来讲讲吧
参考链接
AndroidStudio完美解决"Activity使用Handler时出现警告信息"的问题
在此表示感谢

第一步,抛出问题
5.png

代码没怎么详细写啊,发送message的部分这里就不写了,讲关键的。大家有没有注意到Hanlder匿名类中的背景变得不一样了,这样代码看起来很模糊,很不爽。

一开始,我以为是自己选中代码的缘故,后来发现不是,原来是hangdler的使用存在内存泄露的风险,特殊的背景色是一个警告。

第二步,解除警告的写法

那么下面就来看看消除背景的写法吧:

package com.jpushdemo.ui;

import android.os.Handler;
import android.os.Message;

import java.lang.ref.WeakReference;

/**
 * Title:
 * Description:
 * <p>
 * Created by pei
 * Date: 2017/12/2
 */
public class Sheet {

    private Handler mHandler = new CustomerHandler(Sheet.this);

    //自定义handler类
    static class CustomerHandler extends Handler {
        //弱引用(引用外部类)
        WeakReference<Sheet> mCls;

        CustomerHandler(Sheet cls) {
            //构造弱引用
            mCls = new WeakReference<Sheet>(cls);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //通过弱引用获取外部类.
            Sheet cls = mCls.get();
            //进行非空再操作
            if (cls != null) {
                switch (msg.what) {
                    case 1:
                        // do something...
                        break;
                    case 2:
                        // do something...
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

自定义一个handler类,然后利用WeakReference若引用,判断非空后,将handler的处理逻辑多挪到自定义handler中来,需要注意的是handler引用的是import android.os.Handler;

下面看看截图:


1.png

已经没有讨厌的背景了。

ok,今天关于handler的讲解就到这里吧。

相关文章

网友评论

    本文标题:handler匿名写法的问题

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