返回
史上最全 Handler源码解析(Java层)
Android
2023-10-27 12:47:12
从很早开始就认识到Handler
了,只不过那时修为尚浅,了解的不够深刻,也没有应用自如。不过随着工作时间的增长,对Handler
又有了更深层次的认识,于是有了这篇博客,希望尽可能的总结出更多的知识点。
Handler
在Java层源码主要有4个类:
Looper
MessageQueue
Handler
Message
下面将一一进行分析。
1. Looper
Looper
是一个负责消息循环的类,它维护着一个消息队列MessageQueue
,并不断地从消息队列中取出消息并分发给相应的Handler
进行处理。
public final class Looper {
private final MessageQueue mQueue;
private Thread mThread;
private boolean mRun;
...
}
2. MessageQueue
MessageQueue
是一个消息队列,它是一个先进先出的队列,Looper
会不断地从消息队列中取出消息并分发给相应的Handler
进行处理。
public final class MessageQueue {
private Message mMessages;
...
}
3. Handler
Handler
是一个类,它可以接收、发送消息,并可以处理消息。
public class Handler {
private final MessageQueue mQueue;
private final Callback mCallback;
...
}
Handler
的构造方法如下:
public Handler(Looper looper) {
this(looper, null, false);
}
public Handler(Looper looper, Callback callback) {
this(looper, callback, false);
}
private Handler(Looper looper, Callback callback, boolean async) {
mQueue = looper.mQueue;
mCallback = callback;
mAsync = async;
}
Handler
的handleMessage()
方法用于处理消息,它是Handler
最重要的一个方法。
public void handleMessage(Message msg) {
if (mCallback != null) {
mCallback.handleMessage(msg);
}
}
4. Message
Message
是一个消息类,它包含了消息的内容和发送者。
public class Message {
public int what;
public Object obj;
...
}
使用Handler
来进行消息传递,一般有以下几个步骤:
- 创建一个
Looper
对象。 - 创建一个
Handler
对象,并指定Looper
对象。 - 将消息发送给
Handler
对象。 Handler
对象从消息队列中取出消息并进行处理。
结语
Handler
是一个非常重要的类,它在Android开发中被广泛地使用。它可以帮助开发者实现消息传递、定时任务、UI更新等功能。