为什么要用消息处理机制
如果有多个线程更新UI,并且没有枷锁处理,会导致界面更新的错乱,而如果每个更新操作都进行枷锁处理,就会造成性能的下降,所以在Android开发中,为了使UI操作的线程是安全的,只允许主线程即UI线程可以更新UI组件。
我在平常开发中就会遇到多个线程并发操作UI组件的需求,Android提供了一条消息传递于处理机制来解决这个问题
如何通信
首先Handler作为任务执行者,一般创建在主线程,当子线程有需要发送的数据,通过创建Message对象,使用handler对象将消息发送到message Queue,message queue遵循了队列先进先出的原则,当主线程Looper循环消息的时候,会按照message queue队列的顺序放入消息,并将消息给到任务执行者handler去执行任务
通信原理
Handler创建完成后,内部的Looper以及MessageQueue就可以和handler一起协同工作,然后通过Handler的post方法将一个Runnable投递到handler内部的Looper中处理,也可以通过handler的send方法发送一个消息,这个消息会在Looper中处理,当handler的send方法被调用时,他会调用message Queue的enqueueMessage方法将这个消息放入消息队列中,然后Looper发现有新消息时,就会处理这个消息,最终消息中的Runnable或者handler