gpt4 book ai didi

android - Handler.removeCallbacksAndMessages(null) 和主循环程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:40 27 4
gpt4 key购买 nike

在 fragment 的 onDestory 中,我放置了代码来清理我开始使用 Handler.postDelayed 的所有挂起的可运行对象。

mUiHandler.removeCallbacksAndMessages(null);

我有一个问题。调用 mUiHandler.removeCallbacksAndMessages(null); 安全吗?我的理解是,Android 在主循环器中执行所有 UI 操作,如 UI 布局、UI 渲染、组件生命周期(onCreate、onPause、onResume)。我理解正确吗?然后,当我在 fragment 中调用 mUiHandler.removeCallbacksAndMessages(null) 时,它是否会弄乱或清理主循环器中消息队列中的所有 Android 系统 UI 操作,因为主循环器中只有一个消息队列。

谢谢。

最佳答案

这只会删除已发布到该特定处理程序的消息和回调。它不会删除任何其他内容,所以是的,这样做是安全的。 :)

编辑:它确实与 Looper 共享 Queue,但它检查消息目标以确保它来自相同的 Handler 删除之前。来自 MessageQueue.java:

void removeCallbacksAndMessages(Handler h, Object object) {
if (h == null) {
return;
}

synchronized (this) {
Message p = mMessages;

// Remove all messages at front.
while (p != null && p.target == h
&& (object == null || p.obj == object)) {
Message n = p.next;
mMessages = n;
p.recycle();
p = n;
}

...
}

关于android - Handler.removeCallbacksAndMessages(null) 和主循环程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26126474/

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