【问题标题】:How to use same instance of an Activity which is in background?如何在后台使用相同的 Activity 实例?
【发布时间】:2011-12-12 06:18:28
【问题描述】:

我有这样一个场景:- 有 A、B、C 三种活动。

1。 A 的启动模式是“singleTask”,C 的启动模式是清单中的“singleTop”。 A 调用 B,然后 B 调用 C。

2。现在 C 是应用程序堆栈中最顶层的活动。

3。现在通过按下设备主页键将活动 C 置于后台。

4。我有一个正在运行的服务,它每隔 15 分钟发送一次广播。

5。在广播接收器中,我有这样的意图

Intent i = new Intent(context, A.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

现在 Activity 'A' 进入前台,在其 onResume() 中,我将 Activity 'C' 称为 ACTIVITY_RESET_TASK_IF_NEEDED(有一些标志告诉我 Activity 'C' 已被调用,所以让我们把它放在前台。如果flag 设置为 false 那么它永远不会直接调用 Activity 'C' 而是调用 Activity 'B' 然后调用 'B' 活动'C')。

我在这里试图实现的是用户的观点,即当 Activity 'C' 运行时,Activity 'C' 应该出现在前台。

这是现在的问题:- 由于 FLAG_ACTIVITY_NEW_TASK,我从来没有得到相同的 Activity 'C' 实例,因此我的应用程序进入了奇怪的状态。但是当我的应用程序使用设备后退键进入后台并且我执行所有这些步骤时它可以工作,即我得到相同的活动'C'实例(不知道android如何在内部处理它,但在两个流程中和返回键没有一致性)。

那么,如果 Home 键被​​按下,我该如何实现或保持我的应用程序状态..?

帮助表示赞赏。

【问题讨论】:

标签: android android-activity


【解决方案1】:

您好,在启动Activity 时,请关注flags

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

此标志确保仅允许您的 Activity 的一个实例(如果它已经在运行,则它已从 stack 移到前面,如果它未运行,则创建一个新的 Activity

【讨论】:

  • 为了使其正常工作,请从您的 C 活动中删除所有其他标志
  • 我猜问题是从 FLAG_ACTIVITY_NEW_TASK 调用了活动“A”,因此在新任务中创建了活动“C”。所以你想说的是,虽然它是一项新任务,但如果活动正在运行,那么 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 会正常工作..?
  • 我清楚地提到了上面的标志现在你必须根据相关的活动更改你的标志顺便说一句,你要求的功能可以通过上面的标志来实现,也可以从 C FLAG_ACTIVITY_NEW_TASK 中删除这个标志
  • 为活动“A”设置了FLAG_ACTIVITY_NEW_TASK 标志,这是必需的,因为它是从广播接收器调用的,是的,我将尝试删除活动“C”的其他标志,并且只会为其添加 FLAG_ACTIVITY_REORDER_TO_FRONT。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多