第10章 Android的消息机制
Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。
系统提供Handler主要原因是为了解决在子线程中无法访问UI的矛盾。
子线程不允许防伪UI:Android的UI控件不是线程安全的,多线程中并发访问可能导致UI控件处于不可预期的状态。
ThreadLocal:
线程内部的数据存储类,可以在指定线程中存储数据。其实是个键值对,键是线程对象。
Handler:把消息放在MessageQueue中,Post一个Runnable其实是它赋值给Message对象的callback属性。然后再将Message对象放置在消息队列中。
post方法里面就是sendMessage。Handle处理过程中如果callback不为空会先执行。
message.callback.run();//其实还是在原来的线程当中,可以直接更新UI。
MessageQueue:消息队列,两个操作,插入(enqueueMessage)和读取(next),内部实现通过一个单链表数据结构来维护。
Looper:不停从MessageQueue中查看新消息,有会立即处理没有等待。主线程会内部创建,子线程手动创建
Looper.prepare();//为当前线程创建looper
Looper.loop();//开启消息循环
线程不需要使用的时候终止Looper,有方法quit和quitSafely(消息队列中已有消息处理完毕后安全退出)
一个Looper和hander在同一个线程。
勿忘初衷