Intent.FLAG_ACTIVITY_CLEAR_TOP アクティビティおよびアクティビティ間隔アクティビティ ジャンプの使用法

1. 4 つのアクティビティ (A、B、C、D) が開始されている場合。D アクティビティでは、B アクティビティにジャンプし、C を終了させたいので、以下に示すように、startActivity(intent) のインテントに flags タグを追加できます。

  1. インテントtent = new Intent(this, B.class);   
  2. テント.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  3. startActivity(意図);  

2. この方法で B アクティビティを開始すると、D と C の両方が終了します。B アクティビティの起動モードがデフォルト (複数) の場合、B アクティビティは終了し、新しいアクティビティ B が開始されます。新しい B アクティビティを再作成したくない場合は、以下を追加します。

テント.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

3. 上記 2 つの方法は次のように要約できます。

  1. インテントtent = new Intent(this, B.class);   
  2. tent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);  
  3. 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 ブログ

おすすめ

転載: blog.csdn.net/weixin_42602900/article/details/132898995
おすすめ