在Android当中的异步消息处理主要由Message、Handler、MessageQueue以及Looper组成。
1.Message
Message,消息,是在线程之间传递的消息,内部可以携带部分信息,用于不同线程之间进行数据的交换。常用的字段有,what字段,整型数据,通常用于判断接收到的消息来源于那个Handler;arg1和arg2字段,携带要处理的整型数据;obj字段,携带一个Object对象。
2.Handler
Handler,处理者,主要用于消息的发送和处理。Handler中的sendMessage()方法用来发送消息(Message),handleMessage()方法用于处理消息。
3.MessageQueue
MessageQueue,消息队列,用来存放通过Handler发送的消息。这些消息会一直存在在消息队列当中,等待处理。注:每一个线程只会有一个MessageQueue对象
4.Looper
Looper,用来管理MessageQueue,相当于一个管家。当调用Looper中的loop()方法后,就进入一个无限循环当中,当消息队列中有存在消息,就将其取出,并传递到Handler的handleMessage()方法中。注:每一个线程同样也只会有一个Looper对象
了解的以上这些概念之后,我们来梳理一遍异步消息处理的整个流程:
1.在主线程中创建一个Handler对象,并重写handleMessage()方法;
2.当子线程中需要对UI进行操作时,就创建一个Message对象,然后通过Handler的sendMessage()方法将这条消息发送出去;
3.这条消息会被添加到MessageQueue队列中等待处理;
4.Looper会一直尝试从MessageQueue中取出等待处理的消息,然后发送给Handler的handleMessage()方法中。
5.在handleMessage()方法中对消息进行处理。