之前研究过Android的Handler机制,但是一直没有机会自己实现一次。最近又看到这个Handler机制,于是决定自己实现以下这个Handler机制。
首先,简单介绍以下Handler机制。
Handler机制在Android中通常用来更新UI:子线程执行任务,任务执行完毕后发送消息:Handler.sendMessage(),然后在UI线程Handler.handleMessage()就会调用,执行相应处理。
Handler机制有几个非常重要的类:
Handler:用来发送消息:sendMessage等多个方法,并实现handleMessage()方法处理回调(还可以使用Message或Handler的Callback进行回调处理,具体可以看看源码)。
Message:消息实体,发送的消息即为Message类型。
MessageQueue:消息队列,用于存储消息。发送消息时,消息入队列,然后Looper会从这个MessageQueen取出消息进行处理。
Looper:与线程绑定,不仅仅局限于主线程,绑定的线程用来处理消息。loop()方法是一个死循环,一直从MessageQueen里取出消息进行处理。
原理图如下:
按照上面介绍的4个重要组成类,从内向外依次自定义相应的类,实现Handler机制。
MyMessage类:
public class MyMessage {
private int code;
private String msg;
MyHandler target;
public MyMessage(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
MessageQueue类:(由于该类可以有多种实现方式,所以在此定义一个接口)
public interface IMyMessageQueue {
MyM