什么是Handler

Handler是SDK中处理异步消息的核心类
主要接收子线程发送的数据,并用此数据配合主线程更新UI
重要作用
延时处理消息或Runnable
跨进程通信
Handler不仅可以完成主线程与子线程之间的通信,也可以做到子线程与子线程的通信

工作机制

image.png
【图来自网络】

Message 消息

线程通信的数据单元,比如子线程处理完数据后,要通知UI线程更新UI,就发送一条包含更新消息的Message给UI线程

Message Queue 消息队列

Message Queue是用来存放由Handler发布的Message的集合,并由Looper实例来分发里面的Message对象(让消息队列能不断被调用),同时,message不是直接加入MessageQueue中的,而是通过与Looper对象相关联的MessageQueue.IdleHandler对象来完成的,并且可以通过Looper.myQueue()方法来获取当前线程的MessageQueue

Looper 循环器

扮演MessageQueue和Handler之间的桥梁角色,取出MessageQueue里的Message,交付给对应的Handler进行处理
是线程用来运行消息循环的类,默认情况下,线程没有与之相关联的Looper时可以通过中线程 中调用Looper.prepare()方法来获得,并通过Looper.loop()无限循环地获取并分发MessageQueue中的消息, 直到所有消息全部处理

注意事项

1.一个Activity中只有一个主线程
2.UI线程会自动创建MessageQueue, 和一个Looper
3.只会存在一个MessageQueue,和一个Looper