1. 4 つのアクティビティ (A、B、C、D) が開始されている場合。D アクティビティでは、B アクティビティにジャンプし、C を終了させたいので、以下に示すように、startActivity(intent) のインテントに flags タグを追加できます。
- インテントtent = new Intent(this, B.class);
- テント.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(意図);
2. この方法で B アクティビティを開始すると、D と C の両方が終了します。B アクティビティの起動モードがデフォルト (複数) の場合、B アクティビティは終了し、新しいアクティビティ B が開始されます。新しい B アクティビティを再作成したくない場合は、以下を追加します。
テント.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
3. 上記 2 つの方法は次のように要約できます。
- インテントtent = new Intent(this, B.class);
- tent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
- startActivity(意図);
4. 複数のアクティビティからプログラム全体を終了します (たとえば、A->B->C->D)。この時点では、D からプログラムを直接終了する必要があります。
オンライン情報:finish() と system(0) はどちらも 1 つのアクティビティのみを終了できます。プロセスの強制終了やその他の方法は機能しません。
問題の解決:
Android のウィンドウ クラスが履歴スタックを提供することはわかっており、スタック原理を通じてそれを巧みに実装できます。ここでは、D ウィンドウが A ウィンドウを開くときに、フラグ Intent.FLAG_ACTIVITY_CLEAR_TOP をインテントに直接追加します。再度開くと、プロセス空間内のすべてのアクティビティがクリアされます。
D で次のコードを使用します。
Intent intent = new Intent();
intent.setClass(D.this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
finish();
電源をオフにして
、A にコードを追加します。
Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
//退出
if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
finish();
}
}
A の Manifest.xml は android:launchMode="singleTop" として構成されています
原則の概要:
一般に、A はプログラムのエントリ ポイントです。D から開始して、A のアクティビティが Intent.FLAG_ACTIVITY_CLEAR_TOP フラグとともに追加されます。このプロセスにより、スタック内の B と C がクリアされます。Aはandroid:launchMode="singleTop"なので
oncreate()は呼び出さず、onNewIntent()に応答しますが、その際にIntent.FLAG_ACTIVITY_CLEAR_TOPを決定し、finish() Aを実行します。
スタック内の A、B、C、D はすべてクリアされます。したがって、プログラム全体が終了します。
履歴スタックをクリアする方法を使用して、すべてのアクティビティを賢く閉じることができます。まず、非表示に設定されたアクティビティ A を使用してプログラムを開始します。このアクティビティ A の機能は、スタックの一番下を埋めることだけです。これはのみ使用されます。プログラム アクティビティを開始および終了するには、終了する必要がある場合は、このアクティビティ A にジャンプし、A 自体を終了させてすべてのアクティビティを閉じるだけです。
Intent intent = new Intent();
intent.setClass(B.this, A.class); //B为你按退出按钮所在的activity
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //最关键是这句
startActivity(intent);
Intent.FLAG_ACTIVITY_CLEAR_TOP は、スタックの一番下にある A にブルドーザーの役割を果たし、スタック内のすべてのアクティビティを一番下からクリアし、oncreate メソッドに終了文を追加して自身を終了させ、終了します。心配なければ、A の ondestroy メソッドに system.exit(0) を追加すると、ジャンプ処理中のスレッドも終了できます。
このアクティビティ A を初期化し、プログラムの開始または終了を決定する方法としては、静的型のブール変数を取得して制御するだけです。
転載場所: Intent.FLAG_ACTIVITY_CLEAR_TOP アクティビティの使用法とアクティビティ間隔 アクティビティ Jump_dawnZeng のブログ - CSDN ブログ