複数のActivityを一度に終了する方法

2862 ワード

次の方法があります.
1.チェーンテーブルを使用して終了するActivityインスタンスを保存し、終了するときに、このチェーンテーブルを遍歴して、各Activityのfinishメソッドを呼び出します.具体的には
2.ラジオを使って、Activityごとにこのラジオを受け取って、自分でfinishを落とすことができます. 
public abstract class EnterActivity extends BaseActivity {
//放送の内部クラスを書き、動作を受信すると、終了activity private BroadcastReceiver broadcastReceiver=new BroadcastReceiver(){@Override public void onReceive(Context context,Intent intent){unregisterReceiver(this);//この言葉は間違いを報告しないように書かなければならない.書かないと閉じられるが、間違いを報告する((Activity)context).finish();        }     }; @Override public void onResume(){super.onResume();//現在のactivityにブロードキャストIntentFilter=new IntentFilter();filter.addAction(Attribute.PAGENAME);registerReceiver(this.broadcastReceiver,filter);//登録}/**閉じる*/public void close(){Intent intent=new Intent();intent.setAction(Attribute.PAGENAME);//アクションsendBroadcast(intent);//ブロードキャストfinish();    } }
その後のactivity継承BasicActivity
3.Activityを終了するonStartメソッドに次のコードを追加できます.
   MyApplication mApp = (MyApplication)getApplication();    mApp.setExit(true);    finish();
4.Activityの起動順序がA->B->C->Dであれば、DですべてのActivityをクリーンアップしたいと思います.
Aのマニフェストxmlはandroid:launchMode="singleTop"に配置する、DウィンドウはAウィンドウのIntent加入ID Intentを開く.FLAG_ACTIVITY_CLEAR_TOPは、このようにスタックの中のB、C、Dをすべてクリアすることができて、同時にAは起動モードがsingleTopなため、onCreateを呼び出すのではなく、onNewIntentを呼び出すので、この時intentの値を判断して、Intentならば.FLAG_ACTIVITY_CLEAR_TOPは、A finishを落として、A、B、C、Dはすべてfinishを落としました.
5.Activityの起動順序がA->B->C->Dの場合、Aの起動モードをsingleTaskとすることができる
DからAを起動すると、スタックのAの上にあるActivityをすべてkillし、AのonNewIntentでA finishを落とす.
IDを入れる、判断によって実行することが望ましい、これは安全な点、すなわちDがAを開くときにintentを加えることである.setFlags(xxx);xxxはカスタムint型定数であり、
Intent intent = new Intent(D.this, A.class);
intent.setFlags(9009);
startActivity(intent);
AのonNewIntent()では、アプリケーション全体の命令を破棄するときに自分をfinishすると判断しています.
@Override protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if(intent.getFlags()==9009){      
 finish();
}}
は の では、singleTaskとsingleTopのやり と はあまり いません.
にはいくつかの があるので、どちらでもいいはずですが、 な はシーンを なければなりません.