【问题标题】:What's message queue in Android?Android中的消息队列是什么?
【发布时间】:2023-04-03 03:15:01
【问题描述】:

谁能解释一下 Android 中的消息队列是什么?它是正在运行的进程列表吗?我找不到解释它的好来源。

我之所以问,是因为我正在阅读有关 View 类的方法帖子。

POST

在 API 级别 1 中添加 布尔帖子(可运行的操作)

导致 Runnable 添加到 消息队列。可运行的 将在用户界面线程上运行。

提前谢谢你。

【问题讨论】:

    标签: android post message-queue


    【解决方案1】:

    要了解MessageQueue,您需要了解Android应用的执行模型;

    就像iOS中的Javascript、Cocoa一样,为了避免并发访问竞争,很多App相关的框架都采用了单线程模型。

    这意味着有一个主线程,您将需要完成的工作放入专用于该线程的队列(MessageQueue)中,有一个工作人员(Looper)将从队列中接收您的工作,然后运行它们一个;

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

    当你需要做一个长时间的工作时,你应该把工作放到主线程队列中,当它在消息中做你的工作时,你创建一个新线程来做这个长期工作,工作完成后,你把一条新消息从您的新线程进入主线程消息队列;

    这张图将帮助你了解跑步模型

    【讨论】:

      【解决方案2】:

      简单来说,MessageQueue 是将在某个线程中执行的任务(消息、可运行文件)列表。 Android 系统有一个众所周知的主线程(UI 线程)。您刚刚看到的方法只是将一个 runnable 添加到将在 UI 线程中执行的进程列表中。除了 Looper 和 Handler 之外,MessageQueue 也是 Android 中线程构建块的一部分,它们几乎在系统中的任何地方都使用。

      你什么时候会用这个方法?

      每当您想从另一个线程更新某些 UI 元素(视图元素)时。也许您正在另一个线程中做一些繁重的工作并想要更新 UI 元素,您无法更新其他线程中的 UI 元素但 UI 线程因此您 post 更改为在 UI 线程中执行。

      您可以了解有关 MessageQueue 的更多信息herehere

      【讨论】:

      • 总结:在post方法的上下文中,是不是主线程中运行的进程列表?
      • 这是等待运行的进程列表,它们仍然会被分派到Looper执行
      • 不明白为什么当Handler 成为话题时,每个人都开始谈论 UI 线程。它们不是专门与 UI 耦合的组件。处理程序将发送要在用于实例化new Handler(Looper) 的线程中执行的任务,如果没有提供活套,它将采用关联线程的活套(如果有)(如果没有活套不与线程关联,则会抛出异常)
      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2011-12-09
      • 2021-12-13
      • 2012-03-22
      相关资源
      最近更新 更多