在我看来你已经回答了你自己的问题。你写了:
所以基本上我想改变启动活动,就像
我在一个应用程序中有两个应用程序,当我翻转到第二个应用程序时,我必须
清除活动堆栈。
我会这样做:
创建一个DispatcherActivity
这是应用程序启动时启动的活动。此活动是您任务的根活动,负责启动 A1 或 A2,具体取决于...而不是调用finish()
在其自身上(即:它将被 A1 或 A2 覆盖,但仍位于活动堆栈的根部)。
In A1
,捕获“后退”键并告诉 DispatcherActivity 像这样退出:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("exit", "true");
startActivity(intent);
}
这将清除任务堆栈直至根活动(DispatcherActivity
)然后启动DispatcherActivity
再次怀着这个意图。
In C1
, 推出A2
, 请执行下列操作:
Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);
这将清除任务堆栈直至根活动(DispatcherActivity
)然后启动DispatcherActivity
再次怀着这个意图。
In DispatcherActivity
, in onCreate()
您需要根据意图中的额外内容确定要做什么,如下所示:
Intent intent = getIntent();
if (intent.hasExtra("exit")) {
// User wants to exit
finish();
} else if (intent.hasExtra("A2")) {
// User wants to launch A2
Intent a2Intent = new Intent(this, A2.class);
startActivity(a2Intent);
} else {
// Default behaviour is to launch A1
Intent a1Intent = new Intent(this, A1.class);
startActivity(a1Intent);
}
In A2
,捕获“后退”键并使用相同的覆盖告诉 DispatcherActivity 退出onBackPressed()
as in A1
.
注意:我刚刚输入了这段代码,所以我还没有编译它,它可能并不完美。你的旅费可能会改变 ;-)