Android上的Intent标志

时间:2012-09-24 09:43:17

标签: android android-intent flags

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

活动工作流程应如下所示:

小工具 - >作为接收者的活动

接收器 - > LoginPage或活动A(取决于登录状态)

LoginPage - >活动A

活动A onKeyDown - >活动B

活动B onKeyDown - >主屏幕。

我没有问题,直到活动B,当我按下onKeyDown时,它返回活动A.我正在使用 FLAG_ACTIVITY_CLEAR_TOP 标志,并在启动活动B时完成活动。

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

我也试图在接收器中使用FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK,但我不太了解其机制。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

考虑从Activity A to Activity B移动的场景。现在,如果你想要杀死Activity A并希望转移到Activity B,请拨打startActivity(intent); (你从activity A to B移动的地方) finish()activity A后面的意图没有任何标记。

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

考虑以下情况:

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

现在,如果你想通过清除你可以去Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP的活动,从活动D回到活动A.

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