一.主要组成部分:
Android中的异步消息处理机制主要组成部分为:Message、MessageQueue、Handler、Looper,接下来就让我带大家一起看看吧!
1.Message:
Message,即消息,用于不用线程之间交换数据,其内部可以携带少量的信息。
(1)Message字段介绍:
message.what;//int类型,标识是哪条信息
message.arg1;//int类型,存放整型数据
message.arg2;//int类型,存放整型数据
message.object;//Object类型,存放任意对象
(2)Message对象的获取方式:
Message message1 = new Message();//利用Message类的构造方法创建对象
Message message2 = Message.obtain();//利用Message类中的obtain()方法创建对象
Handler handler = new Handler();
Message message3 = handler.obtainMessage();//利用创建的Handler对象中的obtainMessage()方法创建对象
2.Handler:
Handler,即处理者,用于消息的发送和处理。
(1)Handler的构造函数:
public Handler() {}//无参构造,已经被弃用
public Handler(Handler.Callback callback) {}//有参构造(回调函数),已经被弃用
public Handler(Looper looper) {}//有参构造(Looper)
public Handler(Looper looper, Handler.Calback callback) {}//有参构造(Looper,回调函数)
(2)关键方法:
public void handleMessage(Message msg) {}//处理消息
/**
*获取Message的方法
*只列举了无参构造
*实际上还有几个有参构造的方法
*这里不一一介绍了
*/
public final Message obtainMessage() {}
/**
*发送消息
*还要众多send类与发消息相关的,不一一列举了
*还有post类与发送消息相关,最终也是调用的sendMessage()方法
*/
public final boolean sendMessage(Message msg) {}
public void dispatchMessage(Message msg) {}//分发消息
private boolean enqueueMessage(MessageQueue queue, Message msg,long uptimeMillis) {}//插入消息
3.MessageQueue:
MessageQueue,即消息队列,用于存放通过Handler发送的消息,每个线程只有一个唯一的MessageQueue。MessageQueue虽然叫做消息队列,但是其内部实现其实是一个单链表。
(1)关键方法:
Message next() {}//查找消息
4.Looper:
Looper,每个线程中MessageQueue的管家,用于不断地从MessageQueue之中获取消息,同样是每个线程只有一个Looper。主线程是有默认的Looper的,其它的线程是默认没有的,是需要自己创建的。
(1)关键方法:
public static void prepare() {}//创建一个Loop
public static void loop() {}//开启循环
二.具体处理流程:
三.注意点
1.Handler的执行跟创建Looper的线程相关,与创建Handler的线程无关,比如说在子线程创建一个Handler,但是与Handler相关联的Looper是主线程的,那么发送一个消息,最终的消息处理是在主线程中执行的。
四.比较好的博客等