前言
UIHandler
是对 Handler
的一个封装,其继承自Handler
,本质还是一个Handler
,封装的目的是为了避免Handler
在使用过程中出现内存泄漏。
今天涉及以下内容:
-
handler
使用中存在的问题 -
UIHandler
的使用介绍 -
UIHandler
在MainActivity
中使用代码 - 效果图及项目结构图
-
UIHandler
源码
先来波效果图
一. handler在使用过程中存在的问题
先抛出问题截图
代码没怎么详细写啊,发送message的部分这里就不写了,讲关键的。大家有没有注意到Hanlder匿名类中的背景变得不一样了,这样代码看起来很模糊,很不爽。
一开始,我以为是自己选中代码的缘故,后来发现不是,原来是hangdler的使用存在内存泄露的风险,特殊的背景色是一个警告。
为了避免这种现象的发生,于是我继承handler
写看一个UIHandler
,接下来让我讲讲UIHandler
的使用。
二.UIHandler
的使用介绍
2.1 声明及初始化接收消息
你可以在需要用到UIHandler
传递消息时,这样初始化它:
//声明
private UIHandler mUIHandler;
//然后在初始化时接收处理消息
mUIHandler=new UIHandler(MainActivity.this,new UIHandler.OnUIHandListener() {
@Override
public void uiHandle(Object obj, Message msg) {
//处理接收消息的逻辑
//...
}
});
注:在uiHandle(Object obj, Message msg)
方法内部已经做了msg.what
的移除,所以你在调用uiHandle(Object obj, Message msg)
处理内部逻辑的时候, 无需再调用removeMessages(msg.what)
方法。
2.2 发送消息
UIHandler
继承自Handler
,故发下哦那个消息和Handler
一样。下面给出一个UIHandler
发送消息的示例:
//发送消息
mUIHandler.sendEmptyMessage(1);
三.UIHandler在MainActivity中使用代码
先来看看界面使用效果
ok,是不是没有颜色背景警告了。更重要的是,它还规避了内存泄漏的风险。
接着,看看
UIHandler
在MainActivity
中使用代码:
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private Button mBtn;
//声明
private UIHandler mUIHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView=findViewById(R.id.tv);
mBtn=findViewById(R.id.btn);
mTextView.setText("显示");
mBtn.setText("测试");
//设置调试模式
LogUtil.setDebug(true);
//初始化时接收处理消息
mUIHandler=new UIHandler(MainActivity.this,new UIHandler.OnUIHandListener() {
@Override
public void uiHandle(Object obj, Message msg) {
LogUtil.i("====大家好==you==");
((MainActivity)obj).test1();
mTextView.setText("接收mUIHandler消息:"+msg.what);
}
});
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtil.i("======点击了====");
test();
}
});
}
private void test() {
ToastUtil.shortShow("发送msg: "+1);
//发送消息
mUIHandler.sendEmptyMessage(1);
}
private void test1() {
LogUtil.i("======好啥子哟====");
}
}
四.效果图及项目结构图
效果图
项目结构图
五.UIHandler源码
下面让我们来看看UIHandler
源码: