Hander机制,将子线程需要更新UI操作信息传递到主线程,从而实现UI更新。
基本写法:
```
Handlerhandler =new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e(TAG, "handleMessage: "+msg.obj.toString() );
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
Message message =new Message();
message.obj ="123456";
handler.sendMessage(message);
}
}).start();
}
```
Handler原理:
1.Looper 轮询器
2.MessageQuere 消息队列
3.Handler
4.message 消息
收消息,首先看Looper
prepare()方法
在子线程要自己调用prepare()方法,否则会报错,还要调用loop()方法来轮询MessageQuere,而在主线程Looper是自动创建的,如果你在主线程再创建会抛异常。

判断有没有Looper 实例,有则抛异常,没有则执行new Looper

然后创建一个MessageQueue
所以说一个线程只能有一个Loper和一个MessageQueue,
loop()不断的从消息队列里取消息


target就是handle,

就实现HandleMessage
然后看怎么发消息



最终都会调用sendMessageAtTime(), 参数uptimeMillis就是开机到现在的时间加上延迟的时间,
sendMessage()延迟时间就为0,


通过next属性形成一条单链,按照when时间来排序,大的往后放。

网友评论