0

我的应用程序有一个小部件,它需要在某种程度上独立于应用程序。

活动工作流程应该是这样的:

Widget -> Activity 作为接收者

Receiver -> LoginPage 或 Activity A(取决于登录状态)

登录页面 -> 活动 A

活动 A onKeyDown -> 活动 B

活动 B onKeyDown -> 主屏幕。

在活动 B 之前我没有问题,当我按下 onKeyDown 时它会发送回活动 A。我正在使用FLAG_ACTIVITY_CLEAR_TOP标志并在开始活动 B 时完成活动。

当我使用 CLEAR_TOP 标志从 ActivityA 移动到 ActivityB 时,我认为 Activity 堆栈已被清除,然后在 ActivityB 中,我在 onKeyDown() 方法上完成 Activity,假设应用程序将被关闭,但它没有。为什么?

我也尝试在接收器中使用 FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK 但我不太了解这种机制。对此有任何想法吗?

4

2 回答 2

1

实际上是 FLAG_ACTIVITY_CLEAR_TOP,如果它没有启动或者它作为 BackStack 上的第二个活动返回,则启动你的活动 B。要完成 Activity A,您可以在启动 Activity B 后调用 finish() 或在启动 A 时不添加历史标志。

于 2012-09-24T09:57:58.693 回答
1

@JesusS:我怀疑您是否可以在向前过渡期间以这种方式完成您的活动。

考虑从Activity A to Activity B. 现在,如果你想杀死Activity A并想移动到Activity B然后调用startActivity(intent); (你从哪里移动activity A to B)没有任何关于意图的标志,然后是finish()on activity A

根据我的理解,您Intent.FLAG_ACTIVITY_CLEAR_TOP只能在向后转换期间使用,即当您已经在堆栈上拥有该活动时。

考虑以下场景:

A --> B --> C --> D

现在,如果您想通过清除您可以参加的活动从活动 D 移回活动Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOPA。

结果是活动 D、C、B(LIFO) 将从堆栈中删除,并activity A通过调用onResume()活动 A的恢复来恢复。

于 2012-09-24T10:37:26.787 回答