gpt4 book ai didi

android - 在主线程上创建的 Android View 、 Activity/窗口和处理程序是否有单独的消息队列?

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

我的理解是,既然只有一个 UI 线程,那么就会有一个 UI 消息队列。不管我们使用什么方法

  • Handler(Looper.getMainLooper()).post()
  • View.post()
  • View.getHandler().post()
  • Activity.runOnUiThread()

这些可运行对象被添加到一个 UI 消息队列中并串行执行。

如果我错了,并且我通过代码创建的每个 View 和每个处理程序都有多个消息队列(将它们全部附加到 UI 线程),那么 UI 线程如何决定执行顺序以及优先处理哪个队列?

最佳答案

只有一个MessageQueue。尽管可能有多个 Looper,每个线程一个。

MessageQueue 在每次轮询时同步。

您可以看到 Looper.java 的实现:

static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
private static Looper sMainLooper; // guarded by Looper.class

final MessageQueue mQueue;

然后 whenever queue is looped它可能会阻止:

Message msg = queue.next(); // might block

implementation of MessageQueue#next()使用同步方法。

注意,代码中的注释不是我做的。

关于android - 在主线程上创建的 Android View 、 Activity/窗口和处理程序是否有单独的消息队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43615799/

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