<!--親の顔より見た光景-->

日々の発見を残していきます。

【Android】下位Activityからアプリを終了させる

A → B → C
というアクティビティ遷移をするアプリで、Cアクティビティでアプリ終了機能をもたせたいときどうするか?
System.exit()やkillProcess()を使わずfinish()だけで実現するなら、アクティビティ間で共用するフラグを用意すれば良い。

流れとしては、アプリ終了したいときにフラグを立て、あとはfinish()で戻る戻る…の繰り返し。

A, B, Cどれに持たせても良いが、開始アクティビティに持たせるとすると…
【AActivity.java

public class AActivity extends Activity {
    Button start_button;
    public static boolean app_finish_flag = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    ・
    ・
    ・

共用するのでstaticキーワードをつける。

Cで終了したい時、finish()する前にフラグをtrueにする。
【CActivity.java

    // ・
    // ・
    // ・
    // 中略

    // 終了ボタンリスナー
    private void setButtonListener()
    {
        finish_button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                AActivity.app_finish_flag = true;
                finish();
            }
        });
    }

次にBActivityのonResume()でフラグをチェックする。
フラグがtrueならBActivityの処理を行わずにすぐfinish()
【BActivity.java

    // ・
    // ・
    // ・
    // 中略

    @Override
    protected void onResume()
    {
        super.onResume();
        if ( AActivity.app_finish_flag ) {
            finish();
        }
        else {
            setImage();
            setWord();
        }
    }

最後にAActivityでアプリを終了。
【AActivity.java

    // ・
    // ・
    // ・
    // 中略

    @Override
    protected void onResume()
    {
        super.onResume();
        if ( app_finish_flag ) {
            finish();
        }
    }