安卓中的消息队列是什么?

6

请问有人能解释一下Android中的消息队列是什么吗?它是正在运行的进程列表吗?我找不到一个好的解释。

我之所以问这个问题,是因为我在阅读View类的post方法。

POST

添加于API级别1 boolean post(Runnable action)

使该Runnable被添加到消息队列。该runnable将在用户界面线程上运行。

提前谢谢。

2个回答

2
简单来说,一个MessageQueue是任务列表(消息、可运行对象),将在特定线程中执行。Android系统有一个非常知名的主线程(UI线程)。你刚刚看到的方法只是将可运行对象添加到要在UI线程中执行的进程列表中。除了Looper和Handler之外,MessageQueues也是Android线程构建块的一部分,它们几乎在系统中的任何地方都被使用。
何时使用此方法?
每当您想从另一个线程更新某个UI元素(View元素)时。也许您正在另一个线程中进行一些重型工作,并希望更新UI元素,但不能在其他线程而只能在UI线程中更新UI元素,因此您可以发布更改以在UI线程中执行。
你可以在这里了解更多有关MessageQueues的信息 herehere

总之,在POST方法的上下文中,它是主线程中运行的进程列表吗? - Andressa Pinheiro
1
这是等待运行的进程列表,它们仍将被分派到Looper以执行。 - Levi Moreira
不明白为什么每当谈到“Handler”时,大家都开始谈论UI线程。它们并不是特定的UI耦合组件。如果没有提供looper,处理程序将发送要在实例化“new Handler(Looper)”时使用的线程中执行的任务,如果有任何关联线程的looper,则会采取关联线程的looper(如果没有与线程相关联的looper,则会抛出异常)。 - Farid
@LeviMoreira 你好。MessageQueue有限制吗?如果有很多消息,处理程序无法处理所有消息,那么MessageQueue会被阻塞吗? - Hayk Mkrtchyan

1

要理解MessageQueue,你需要了解Android应用程序的执行模型;

就像JavaScript、iOS中的Cocoa一样,为了避免并发访问竞争,许多与应用程序相关的框架采用了单线程模型。

这意味着有一个主线程,你把需要完成的工作放入专门为该线程提供的队列(MessageQueue)中,有一个工作者(Looper)会从队列中检索你的工作,并逐个运行它们;

这种模型避免了应用程序中的并发冲突;

当你需要做长时间的工作时,你应该将工作放入主线程队列中,当需要在消息中执行你的工作时,你可以创建一个新线程来执行这个长时间的工作,工作完成后,你可以从新线程向主线程消息队列中放入一个新消息;

这张图片将帮助你理解运行模型 enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接