【问题标题】:Does Android guarantee order of intents?Android 是否保证意图的顺序?
【发布时间】:2010-11-09 21:39:48
【问题描述】:

当发送两个意图时(一个通过startService,另一个通过startActivityForResult,举个例子),Android 是否保证第一个意图(服务)在第二个(活动)之前处理?更具体地说,在这种情况下,它是否保证 Service.onStartCommandActivity.onCreate 之前被调用?

这是假设一切都在同一个进程中运行,因此来自多个主线程的线程问题不会干扰。

我知道 Android 不保证单个 Intent 的处理顺序(无法保证收件人的顺序,但会受到 Intent 过滤器优先级的影响),但我找不到任何提及 Intent 之间顺序的内容。

我个人认为,考虑到单个主应用程序线程,顺序会保持不变,但我面临一些我很难解释的错误,除非意图的顺序发生变化。

【问题讨论】:

    标签: android concurrency android-intent


    【解决方案1】:

    这应该会有所帮助。 BroadcastReceiver Developer Page

    关键是启动活动的意图在语义上非常不同。

    通过记录来测试订单似乎很容易。

    【讨论】:

    • 完全错过了那部分。我猜这些事情在 Android 内部变得很复杂,因为它们需要跨越 VM 边界 - 测试的问题是大多数时候它似乎按预期工作。我只是假设它没有。
    【解决方案2】:
    1. 我不相信 Android 会做出任何保证 - 尤其是,我相信 Context.startService 将是异步的编辑:在您发表评论后,我相信您是对的,startService 只有在服务调用其onCreate 方法后才会返回。但是,如果Service在另一个应用程序中,那么它通常不会在同一个进程中运行,更不用说在同一个线程中了。
    2. Android 可能不会做出此保证,因为它已经声明虽然它会尝试保持服务运行,但它可能理论上在您调用 @ 之间终止服务987654325@ 和您的电话至Activity.startActivityForResult
    3. 为什么首先需要这样的保证?在需要时通过startServicebindService 获取服务,指定应用程序在其生命周期阶段应发生的情况,并让 Android 自行管理生命周期。

    脚注:另外,如果您的Activity 已经在运行,则在您调用onActivityStart 时可能不会调用onCreate 方法。

    【讨论】:

    • 我不知道 startService 将如何异步,因为 Android 服务并不意味着多线程,它们共享主应用程序循环。在这种情况下,完整的故事是服务器浏览器启动后台连接和客户端活动。客户端活动在服务进入“断开连接”状态时完成(如果它最初不存在,则默认创建该状态)。我想我需要在浏览器中等待直到连接,然后才进入客户端活动,即使这也需要浏览器跟踪服务状态,这会使事情变得复杂。
    • 你是对的 - startService 可能不是异步的 - 只有在 onStart 返回之后才返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多