前言
handler是我们熟悉不过的了,最近在写handler时出现了一个问题,虽然功能实现,但是在代码的展示上总有那么点别扭,下面就来讲讲吧
参考链接
AndroidStudio完美解决"Activity使用Handler时出现警告信息"的问题
在此表示感谢
第一步,抛出问题
![](https://img.haomeiwen.com/i6127340/8d02610aed01fc2c.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;
下面看看截图:
![](https://img.haomeiwen.com/i6127340/eb215bb42a860522.png)
已经没有讨厌的背景了。
ok,今天关于handler的讲解就到这里吧。
网友评论