解析异步消息处理机制

Android中的异步消息处理主要有4个部分组成:Message、Handler、MessageQueue 和 Looper。

1、Message

   Message是线程之间传递的消息, 它可以在内部携带少量的信息,用于在不同线程之间交换数据。 可以使用what、arg1和arg2 字段来携带一些整型数据, 使用obj字段携带一个Object对象。

2、Handler

 主要用于处理和发送消息。发送消息一般使用的是Handler 的 sendMessage()方法, 最终会传递到Handler 的 handleMessage()方法中。

3、MessageQueue

 消息队列, 它主要用于存放所有通过Handler发送的消息。每个线程中只有一个MessaQueue对象。

4、Lopper

是每个线程中的MessageQueue 的管家, 调用Looper的loop()方法后, 就会进入到一个无限循环中, 然后每当发现MessageQueue 中存放一条消息, 就会将她取出, 并传递到Handler 的 handleMessage()方法中。 每个线程中只有一个Looper对象。

异步消息处理流程梳理: 首先需要在主线程当中创建一个Handler 对象, 并重写handleMessage()方法。然后当子线程需要进行ui操作时,就创建一个Message对象,并通过 Handler 的 sendMessage()方法 将其发出去。左后分发到Handler 的 handleMessage()方法中, 由于Handler 是在主线程中创建的, 于是就可以安全的进行ui操作了。

   一条Message 经过这样的一个流程的辗转调用后, 也就从子线程到主线程, 从不能更新ui到编程可以更新ui, 整个异步消息 处理的思想即使如此。

   不过为了更方便地在子线程对UI操作, Android提供了更好的工具, 比如AsyncTack。




猜你喜欢

转载自blog.csdn.net/qq_41405257/article/details/80185202