【问题标题】:singleTask Activity called from Service doesn't trigger onNewIntent从 Service 调用的 singleTask Activity 不会触发 onNewIntent
【发布时间】:2013-05-03 00:46:10
【问题描述】:

我的理解是,如果一个 singleTask 活动已经存在,则不会再次创建它,但会调用它的 onNewIntent。

事实上,当我从另一个 Activity 而不是从服务启动 Intent 时,就会发生这种情况。

此外,我注意到如果我将我的 Activity 声明为 singleInstance(即在这种情况下,即使从服务 onNewIntent 确实被调用),这不会发生,但它也涉及我不想要的回栈复杂性。

我不明白的是,如果我有一个正在运行的 singleTask Activity 的实例,它总是会调用 onNewIntent,并且它确实从 Activity 但不是服务以这种方式工作。

为什么会这样,我应该怎么做才能保持我的后栈完好无损,只是将我现有的活动从我的服务中移到顶部?

注意:当我调用 singleTask Activity 时,我确实有 FLAG_ACTIVITY_NEW_TASK。

谢谢!

【问题讨论】:

    标签: android android-intent android-activity android-service android-lifecycle


    【解决方案1】:

    我测试过,从服务启动时会调用 onNewIntent。我认为发生的情况是您的任务被系统杀死,因此当您从服务启动时会创建一个新任务,因此不会调用 onNewIntent。

    【讨论】:

    • 谢谢,但我已经有了这个标志...不过我会把它添加到描述中:)
    • 在我看来,从活动调用时,singleTask 会清除顶部。我使用 A singleTask 和 B 测试正常活动。 A --> B --> A 后按时我期望 B 但我得到了启动活动。从 B 我正常启动 A 并且也使用 FLAG_ACTIVITY_NEW_TASK
    • 它确实清除了顶部,但它是通过重新创建 Activity 而不是将其带回顶部来实现的,并且仅在 singleTask 和“从服务调用”的组合中,我没有得到...
    【解决方案2】:

    所以看来我可以通过不让我的服务回答 HOME 意图来解决我的问题。

    我应该提到:我的服务获取主页意图,然后启动我想要查看的实际活动。我找不到方法让它不擦除该活动的前一个实例,而不使用 singleInstance。

    所以到目前为止,让 Activity 本身处理 HOME 事件似乎可以防止重新创建(可能是因为在获取 home 意图时服务正在破坏其他所有内容)。我不是 100% 确定我得到了这个的所有内部工作原理,但它似乎是一个足够好的解决方案。

    【讨论】:

      【解决方案3】:

      我在尝试解决类似问题时看到了这个问题。我在另一个线程中回答了我对这个问题的解决方案,也许相同的响应在这个线程中很有用: Intent with old extra in onCreate() for singleTask Activity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-09
        • 2021-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        相关资源
        最近更新 更多