onStop вызвали несмотря на активность завершающего процесса - PullRequest
0 голосов
/ 16 декабря 2018

В приведенном ниже коде я вызываю isFinishing () из onPause, чтобы в случае завершения действия я вызывал метод finish () и, следовательно, модуль shutDownDatabase ().Во время тестирования кода я столкнулся с ситуацией, когда isFinishing () был равен true, впоследствии был вызван shutDownDatabase ().Но также был вызван onStop (), что вызвало повторный вызов модуля shutDownDatabase ().

Не могли бы вы объяснить, почему вызывается onStop (), несмотря на то, что действие находится в процессе завершения ??Поскольку я ожидал, что onStop () никогда не будет вызываться, поскольку isFinishing () было истинным, в то время как активность в onPause ().

, пожалуйста, посмотрите код, размещенный ниже, и журналы.

код :

@Override
protected void onPause() {
    super.onPause();
    Log.w(TAG_LOG, "->onPause");

    if(isFinishing()) {
        this.finish();
    }
}

@Override
public void finish() {
    String TAG_LOG = ActMain.TAG_LOG + "->" + "finish";
    super.finish();
    Log.w(TAG_LOG, "->Activity is finishing");
    this.shutDownDatabase();
}

private void shutDownDatabase() {
    String TAG_LOG = ActMain.TAG_LOG + "->" + "shutDownDatabase";
    Log.w(TAG_LOG, "is called");
    OptionalsUtils.toOptional(this.getBuiltMovieRoomPersistentDatabase())
            .ifPresent(x->{
                Log.w(TAG_LOG, "->Movie Room Persistent Database will shutdown.");
                this.setIsDatabaseOpen(false);
                x.close();
            });
}

@Override
protected void onStop() {
    super.onStop();
    String TAG_LOG = ActMain.TAG_LOG + "->" + "onStop";
    Log.w(TAG_LOG, "is called.");
    this.shutDownDatabase();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    String TAG_LOG = ActMain.TAG_LOG + "->" + "onDestroy";
    Log.w(TAG_LOG, "->is called.");
}

logcat :

2018-12-16 12:26:10.989 com.example.pc_am.room_01 W/ActMain: ->onPause
2018-12-16 12:26:10.996 com.example.pc_am.room_01 W/ActMain->finish: ->Activity is finishing
2018-12-16 12:26:10.997 com.example.pc_am.room_01 W/ActMain->shutDownDatabase: is called
2018-12-16 12:26:10.997 com.example.pc_am.room_01 W/ActMain->shutDownDatabase: ->Movie Room Persistent Database will shutdown.
2018-12-16 12:26:10.997 com.example.pc_am.room_01 V/ActMain: ->setIsDatabaseOpen: false 
2018-12-16 12:26:11.838 com.example.pc_am.room_01 W/ActMain->onStop: is called.//<-
2018-12-16 12:26:11.838 com.example.pc_am.room_01 W/ActMain->shutDownDatabase: is called
2018-12-16 12:26:11.838 com.example.pc_am.room_01 W/ActMain->shutDownDatabase: ->Movie Room Persistent Database will shutdown.
2018-12-16 12:26:11.838 com.example.pc_am.room_01 V/ActMain: ->setIsDatabaseOpen: false
2018-12-16 12:26:11.839 com.example.pc_am.room_01 W/ActMain->onDestroy: ->is called.
...