返回

史上最全 Handler源码解析(Java层)

Android

从很早开始就认识到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;
}

HandlerhandleMessage()方法用于处理消息,它是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来进行消息传递,一般有以下几个步骤:

  1. 创建一个Looper对象。
  2. 创建一个Handler对象,并指定Looper对象。
  3. 将消息发送给Handler对象。
  4. Handler对象从消息队列中取出消息并进行处理。

结语

Handler是一个非常重要的类,它在Android开发中被广泛地使用。它可以帮助开发者实现消息传递、定时任务、UI更新等功能。