gpt4 book ai didi

java - Android 处理程序 handleMessage() 方法调用

转载 作者:行者123 更新时间:2023-11-29 03:01:02 27 4
gpt4 key购买 nike

当我们在主 UI 线程中实例化一个 Handler 对象时(对于这个例子,假设我正在使用匿名内部类)。

Handler h = new Handler () {
@override
public void handleMessage (Message msg) {
/* Code to handle the message */
}
};

我们可以将此 Handler 对象引用传递给其他线程,这些线程可以使用此引用 (h.sendMessage()) 将状态更新发布到 UI 线程。

疑问:我们没有在任何地方向Activity 类或UI 线程提供自定义匿名类引用h Handler。为了调用重写的方法,UI 线程必须具有对我们类的对象引用。那么如何调用覆盖的 handleMessage() 而不是默认的呢?

最佳答案

您的handleMessage() 正在被Looper 调用。可以看到here该循环器在消息目标上调用 dispatchMessage,它是 Handler .当您 post a message 时,目标将被分配一个 this 引用内部处理程序。所以流程如下:

  1. 您在处理程序上发布一条消息,它会在内部创建一个 Message 对象并引用其处理程序。

  2. 该消息被放入由主 UI thred 管理的消息队列(在这种特殊情况下)

  3. 时间到了,Android 会从队列中删除您的消息并使用其目标字段 - 对其调用 handleMesage。

此外 - 重要的是,如果您在创建 Handler 时没有指定特定的 Looper,则默认 Looper 将用于实例化它的线程。在您的案例中,它是 Main UI Looper。

关于java - Android 处理程序 handleMessage() 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com