今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Androidアプリが終了したように見せかけて終わってない件

複数のActivityで構成するAndroidアプリを作るってことで、共通の処理をまとめたHogeActivityを作った。そのなかで、dispatckKeyEvent()をオーバーライドして、BACKキーが押されたらfinish()を呼び出すようにコードを書いた。
GPSを使うので、LocationManagerにLocationListenerを登録して動作確認のテストをした後で気付いた。
全部のActivityが終了したあとも、LocationListenerからのログが出続けてる。単にLocationManagerからLocationListenerを削除し忘れてるバグなんだけど、これってアプリが終わってないって意味よね?

バグをそのまま残しておいていろいろと試すけど、どうもアプリのプロセスが残ったままになって生きてる。Activityが終了してもプロセスは生きてるってことだ。

アプリが終了してるんならプロセスも終了したほうがいいよね?
スタックの最後にあるActivityでBACKボタンが押されたときに、quitフラグをチェックして、onStop()でプロセスを終了させるようにした。

    private boolean quit = false;

    @Override
    public boolean dispatchKeyEvent(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.KEYCODE_BACK && e.getAction() == KeyEvent.ACTION_DOWN) {
            quit = true;
            finish();
            return true;
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (quit) {
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }

もっといい方法があったら教えてくだちい。