一度に複数のActivityを閉じる

1849 ワード

まず原理を言えば、複数のActivityを閉じる場所で1つのブロードキャストを発行し、閉じるActivityでは、これらのブロードキャストを登録することで、複数を一気に閉じることができます.もちろんコードの良好さのために、BaseActivityというActivityを明らかにしなければなりません.そうすれば、コードを1つの場所に書くだけでいいです.まず、BaseActivityでブロードキャスト受信者を宣言します.コードは次のとおりです.
protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        finish();
    }
};

更に3つの方法を書いて、この放送を登録して、この放送を登録して、この放送をスタートさせて、まず私達は1つの常亮を定義して、この放送のactionをスタートさせて、例えばFINISH_と言いますACTION;コードは次のとおりです.
protected final String FINISH_ACTION = "finish_action";

/**
 *  
 */
protected void registerQuitBroadcast(){
    IntentFilter filter = new IntentFilter();
    filter.addAction(FINISH_ACTION);
    this.registerReceiver(finishAppReceiver,filter);
}

/**
 *  
 */
protected void unregisterQuitBroadcast(){
    this.unregisterReceiver(finishAppReceiver);
}

/**
 *  
 */
protected void startQuitBroadcast(){
    Intent intent = new Intent();
    intent.setAction(FINISH_ACTION);
    this.sendBroadcast(intent);
}

注記:通常、シャットダウンが必要なActivityでは、onResum()メソッドにブロードキャストが登録され、onDestroy()でブロードキャストがキャンセルされ、他のActivityをシャットダウンする必要がある場合は起動ブロードキャストが呼び出されます.前提:この一連のActivityは、これらのメソッドを含むBaseActivityを統合する必要があります.
最後に、終了プログラムをダブルクリックするコードを追加します.次のようにします.
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (KeyEvent.KEYCODE_BACK == keyCode) {
        if (System.currentTimeMillis() - exitTime > 2000) {
            Toast.makeText(getApplicationContext(),  
            " ",Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            startQuitBroadcast();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

やった!