Android Handler

Posted by RedLeaves on May 27, 2021

1 机制

2 其他

Handler有sendMessage和post两种用法,但本质上都是Message,post是通过sendMessage实现的。

1
2
3
public final boolean post(@NonNull Runnable r) {
    return  sendMessageDelayed(getPostMessage(r), 0);
}

sendMessage最后都是通过enqueueMessage将Message加入Message Queue的。

Looper.loop是一个死循环,负责消息分发。

1
2
3
4
5
6
7
8
9
10
11
public static void loop() {
    // ...
    for (;;) {
        Message msg = queue.next(); // might block
        // ...
        msg.target.dispatchMessage(msg);
        // ...
        msg.recycleUnchecked();
    }
    // ...
}

Handler有sendMessage和post两种用法,dispatchMessage针对两种用法分别实现。

1
2
3
4
5
6
7
8
9
10
11
12
public void dispatchMessage(@NonNull Message msg) {
    if (msg.callback != null) {
        handleCallback(msg);
    } else {
        if (mCallback != null) {
            if (mCallback.handleMessage(msg)) {
                return;
            }
        }
        handleMessage(msg);
    }
}

mCallback在构造Handler时传入,作用和重载handleMessage函数一样。

3 参考文档