我使用startActivity(Intent)在我的Android应用程序中创建一个新活动。
是否有可能杀死其中一项活动,如果是,如何?
我真正想要做的是,假设我有4个活动在同一时间运行,按此顺序打开
活动1 - >活动2 - >活动3 - > Activity4
当用户按下后退按钮时,而不是
活动4 - >活动3 - >活动2 - >活动1 - >关闭申请
我想要这样
活动4 - >活动1 - >关闭申请
答案 0 :(得分:1)
是的,你可以这样做。
将此标记添加到清单中的Activity3和Activity2:
android:noHistory="true"
这样,这些活动就不会添加到backStack中,因此按下Activity4上的后退按钮会使用户转到Activity1。 (在活动3和2中也会发生同样的情况。)
答案 1 :(得分:1)
当您启动序列中的下一个活动时,可以使用finish()
方法关闭活动2和3。这将使您从4到1,但也从3到1。
答案 2 :(得分:1)
第一个Activity1应该在singleTop的清单中设置一个特殊的launchMode。这将确保如果它已经位于堆栈顶部,则不会创建另一个版本的Activity1。
对于您想要特殊后退按钮行为的每个活动,您应该覆盖onBackPressed()。在onBackPressed里面实现以下代码:
public void onBackPressed () {
Intent goBackTo1 = new Intent(this, Activity1.class);
goBackTo1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goBackTo1);
}
上面的代码将启动Activity1,但在此之前它将清除历史堆栈中Activity1之后的所有活动。发生这种情况时,Activity1将在方法onNewIntent(Intent intent)中将新意图传递给已经运行的Activity1。
EX:
Activity1->Activity2->Activity3->Activity4
如果他们实现上面的代码,则从2,3或4调用onBackPressed时会成为这个。您可能希望将基本活动类视为不重复代码。
Activity1