handler消息机制,三个部分,Handler、Messagequeue、looper
handler用作主线程和子线程的通讯工具,异步线程和主线程通信
android消息机制,首先想Handler,Handler》android消息机制》上层接口,
public class Activity extends android.app.Activity {
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println(msg.what);
}
};
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
...............耗时操作
Message message = Message.obtain();
message.what = 1;
mHandler.sendMessage(message);
}
}).start();
}
}
消息机制的模型
message:传递的消息,可传递数据
messagequeue:消息队列,并不是队列,而是一种单链表的数据结构的队列,
handler:发送各种消息,以及处理相应消息事件,
looper:是一种循环机制,从massagequeue中读取消息,分发给目标处理者
消息机制的架构
在子线程执行完耗时操作,handler》发送消息,将调用meaasgequeueu.enqueueMessage(enqueue入队),想消息队列+消息
Looper。loop开启循环,不断从线程池中读取消息,调用目标handler的dispatchmessage方法传递消息,》返回到handler所在线程,目标handler收到消息,调用handlermessage接收,处理消息
messagequeueu、handler、looper三者的关系
每个线程》only一个looper,looper》save在threadlooper中,主线程》有一个looper不必创建,其他线程还是要创建的,一个线程可以有多个handler,一个looper维护一个messagequeue,
总结:
looper有一个messagequeueq
messagequeue有一组待处理的message
massage记录发送和处理的handler
handler中有looper和massagequeue