【问题标题】:Android "singleTask" activity creates new instance of the ActivityAndroid“singleTask”活动创建活动的新实例
【发布时间】:2019-12-03 03:37:42
【问题描述】:

我有两个不同的应用程序,分别称为 App AApp B

  • App A : ActivityA 与启动模式 -> “singleTask”
  • App B : ActivityB 启动模式 -> “singleInstance”

步骤:

  1. 打开将打开 ActivityA、ActivityStack 的 App A:ActivityA
  2. 使用 startActivityForResult() 启动 App B,ActivityStack : ActivityA > ActivityB
  3. 通过 Intent 从 Activity B 打开 ActivityA,ActivityStack:ActivityA > ActivityB > ActivityA

正如你所看到的活动堆栈,它创建一个新的活动A实例,而不是通过调用onNewIntent()方法返回到同一个活动A实例。

我不确定,这是因为 Activity 为结果而启动的吗?请帮助在这种情况下提供适当的解决方案。谢谢。

【问题讨论】:

  • 我认为活动从来没有任何实例。它由 android 生命周期管理。
  • 尝试在您的 ActivityB 意图“flag_activity_reorder_to_front”中添加此意图过滤器
  • 我已经回答了你的问题。但是你想做什么?我确信有更简单的方法可以做到这一点。
  • @David Wasser:当我通过 Intent 从 Activity B 发送 Open ActivityA 时,我希望通过 onNewIntent() 调用相同的 ActivityA 实例(启动 ActivityB),而不是创建新实例。你能帮我解决这个问题吗?
  • 您可以使用startActivityForResult() 进行 A 呼叫 B。如果您使用特殊的启动模式(singleInstance 或 singleTask),这将不起作用。为什么要使用特殊的启动模式?

标签: android android-intent android-activity


【解决方案1】:

您不能使用startActivityForResult() 启动singleTask Activity。如果您启动 Activity 并期望返回结果,则目标 Activity 必须在同一任务中启动。因此,当您调用 startActivityForResult() 时,Android 会忽略 singleTask 启动模式。

【讨论】:

  • 感谢@David Wasser。有道理。如果您已经为结果启动了一个 Activity,那么 android 会自动忽略“singleTask”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多