我的应用程序有一个小部件,需要在某种程度上独立于应用程序。
活动工作流程应如下所示:
小工具 - >作为接收者的活动
接收器 - > 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,但我不太了解其机制。有什么想法吗?
答案 0 :(得分:1)
实际上是FLAG_ACTIVITY_CLEAR_TOP,如果它没有启动你的活动B,或者它作为BackStack上的第二个活动回来。要完成活动A,您可以在启动活动B后调用finish()或在启动A时不添加历史标记。
答案 1 :(得分:1)
考虑从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()
来恢复。