handler的工作原理
一、工作机制
- 在子线程中创建一个handler的成员变量;
- 在子线程得到handler的引用,调用sendMessage给主线程发送一个消息
- 在handler中重写handlermessage,修改ui界面
二、工作原理
前提知识:所有的ui界面的操作系统,后台都运行者一个死循环,它在不停的监听和接收用户发出的指令,一旦接收指令就会立即执行
子线程调用handler的sendMessage方法,把消息发送给handler,handler把消息放到Looper内部维护消息队列里,Looper不停地从消息队列取消息
,取到消息后在发送给handler,handler再修改ui界面。
三、图形讲解:
学习总结:
在学习过程中发现如果在更新ui界面的时候传递数据(比如说修改ui界面上的TextView控件上的文本内容)这个时候我们可以这样做
Message msg=Message.obtain();
msg.obj="要传递的内容"
handler.sendMessage(msg);
然后在handleMessage()方法中将TextView文本框中的内容跟新
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
String content=msg.obj;
//更新控件tv上的文本内容
tv.setText(content);
}
};
如果我们只是想执行handleMessage()方法中的内容,这时只要通过sendMessage()随便向handler发送一条数据即可,这样handler也会执行它的handlerMessage()方法中的内容
比如,我们从数据库中分批取出数据来跟新ui界面