あなた自身の質問に答えたようです。あなたが書いた:
基本的には、開始アクティビティを変更したいのですが、1 つのアプリに 2 つのアプリがあり、2 つ目のアプリに切り替えると、アクティビティ スタックをクリアする必要があります。
私はこのようにします:
DispatcherActivity
アプリケーションの起動時に起動されるアクティビティである を作成します。このアクティビティはタスクのルート アクティビティであり、依存する A1 または A2 の起動を担当し、finish()
それ自体を呼び出しません (つまり、A1 または A2 によってカバーされますが、アクティビティ スタックのルートに残ります)。
で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
でC1
を起動するA2
には、次の手順を実行します。
Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);
これにより、タスク スタックがルート アクティビティ ( ) までクリアされ、このインテントで が再びDispatcherActivity
開始されます。DispatcherActivity
ではDispatcherActivity
、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);
}
でA2
、「戻る」キーをトラップし、 DispatcherActivity に と同じオーバーライドを使用して終了するように指示しonBackPressed()
ますA1
。
注: このコードを入力しただけなので、コンパイルしていないため、完全ではない可能性があります。あなたのマイレージは異なる場合があります ;-)