2012-09-24 44 views
0

我有我的应用程序,这需要从应用程序有些独立的小部件。意图国旗在Android

活性工作流应该是这样的:

窗口小部件 - >活动充当接收机

接收机 - > LoginPage或活性的(取决于登录状态)

LoginPage - >活动A

活动A onKeyDown - >活动B

活动B onKeyDown - >主屏幕。

我没有问题,直到活动B,当我按下的onkeydown,它发送回活动A。我使用FLAG_ACTIVITY_CLEAR_TOP标志和整理活动开始活动B.

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

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

+1

那么,有什么问题被删除? – nullpotent

+0

当活动A移动到活动B且顶部为空时,活动堆栈应该清除。然后在Activity B中,我重写onKeyDown并完成活动,所以我认为它应该关闭应用程序,但它不会,活动A再次显示。我想要应用程序在按下onKeyDown时关闭Activity B。 – JesusS

回答

1

其实FLAG_ACTIVITY_CLEAR_TOP,开始你的活动b。如果其未启动或它回来作为返回堆栈中的第二个活动。要完成活动A,可以在启动活动B之后调用finish()或添加没有历史标志,开始A.

+0

那是我需要的旗帜。谢谢! – JesusS

1

@JesusS的时候,我怀疑u能正向过渡期间,在时尚完成UR活动。

考虑从Activity A to Activity B移动的场景。现在,如果u想杀死Activity A并想搬到Activity B然后调用startActivity(intent); (其中UR从activity A to B移动) 而对意图其次finish()activity A任何标志。

按我的理解ü只能在落后的转变即使用Intent.FLAG_ACTIVITY_CLEAR_TOP当u已经在堆栈上的活动。

考虑以下情形:

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

现在如果u想通过清除活动ü可以去Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP移动从活动d回到活动A。

的结果是,活动d,C,B(LIFO)将从堆栈和activity A简历通过调用活动A的onResume()