下面这段代码来自我自己写的一个小程序,利用handler实现了UI线程和子线程的通讯
//先定义一个handler
static private Handler handler;
//用匿名内部类的方式创建handler,重现里面的handleMessage方法,作用就是当你接收到符合要求的msg,就执行方法体里面的内容,这个msg当然是来自其他线程的。
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == COMPLETED) {
//这里我就是用来设置控件状态的代码,让一些控件的状态变为不可见
binding.buttonWeb1.setEnabled(false);
binding.buttonWeb2.setEnabled(false);
binding.buttonWeb3.setEnabled(false);
binding.buttonWeb4.setEnabled(false);
binding.buttonWeb5.setEnabled(false);
binding.buttonWeb6.setEnabled(false);
binding.buttonWeb7.setEnabled(false);
binding.buttonWeb8.setEnabled(false);
binding.buttonWeb9.setEnabled(false);
binding.buttonWeb0.setEnabled(false);
binding.buttonWebC.setEnabled(false);
binding.buttonWebOk.setEnabled(false);
}
}
};
//而在另一个线程里面,就需要在特定的情况下执行这段代码
//先创建一个msg对象
Message msg = new Message();
//改变msg对象中的what属性
msg.what = COMPLETED;
//调用sendMessage方法
handler.sendMessage(msg);
这样的两段代码分布在两个线程中,利用handler进行线程的通讯,以规避安卓ui改变的限制。