解析Handler异步消息处理!

Handler中异步消息处理一般由四个部分组成,Message、Handler、MessageQueue和Looper。

1、Message :是在线程之间传递消息,它可以携带信息,用于不同线程之间交互数据。它里面字段有
waht、arg1、arg2(int类型)、object型数据。

2、Handler: 它主要用于发送消息和处理消息,发送消息一般是使用Handler的sendMessage()方法,
发出消息之后,辗转处理后,最终会传递到handlerMessage()中

3、MessageQueue:消息队列,它主要存放handler发送的消息。这部分消息会一直存放在队列中,等待
被处理。每个线程中只有一个MessageQueue队列。

4、Looper:是MessageQueue队列的管家,调用loop()方法后,就会进入到一个无线循环当中,然后每当
发现队列中有消息,就会取出,并传递到Handler的handlerMessage方法中()。

了解了上面的几个的基本概念之后,我们再把异步消息处理的流程梳理一遍,首先需要在主线程中创建一个Handler对象,并重写handlerMessage()方法。然后当子线程中更新UI的时候,我们先创建一个Message对象,并通过Handler发送出去。之后这条消息会被添加到MessageQueue队列中等待被处理,而Looper一直尝试从队列中取消息,最后分发到handlerMessage()方法中。由于Handler是在主线程创建的,所以handlerMessage()方法会在主线程中运行,于是我们就可以更新UI了。
以下是流程图:

解析Handler异步消息处理!

总结:以上是Handler的运行机制,也是如何在子线程中辗转到主线程的流程!!