これは、次の質問に関連しています。
戻るキーが検出されましたが、アクティビティが終了していません
基本的に、アクティビティを終了するには BACK を 2 回押す必要があります (C と呼んでいます)。 sessionActive() というステータス メソッドがあります。
sessionActive() が FLASE で BACK が押された場合、Activity C は終了するはずです。
onKeyDown()/onBackPressed() に finish() の呼び出しを含めました
onCreate()、onResume() などのメソッドをトレースしましたが、表示されるシーケンスがわかりません。以下の logcat のスニペットは、ライフサイクル メソッドが順不同で発生していることを示しています。
C.onCreate()
C.onStart()
C.onResume()
C.onKeyDown() sessionActive()==false, keyCode = BACK
This is the 1st BACK press that should get us out but doesn't
C.finish() sessionActive is FALSE
Shouldn't this execute onStop()?
C.onPause() sessionActive is FALSE <- Why are these running?
C.onRestart() sessionActive is FALSE
C.onStart() sessionActive is FALSE
C.onResume() sessionActive is FALSE
C.onStop() sessionActive is FALSE <- These makes sense.
C.onDestroy() sessionActive is FALSE
C.onPause() sessionActive is FALSE <- Why didn't the previous onDestroy() stop us?
C.onResume() sessionActive is FALSE <- Confusing!!!
C.onKeyDown() sessionActive is FALSE, keyCode = BACK
This is 2nd BACK press that causes Activity C to exit.
C.finish() sessionActive is FALSE
C.onPause() sessionActive is FALSE <- Why is there is no onRestart here?
C.onStop() sessionActive is FALSE <- This is the sequence I expect.
C.onDestroy() sessionActive is FALSE
これは正常ですか?もしそうなら、なぜライフサイクルが異なって実行されているのか理解できません。
アクティビティ C の開始方法に関連している可能性があります。
Intent startActivity = new Intent();
startActivity.setClass(this,C.class);
startActivity.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(startActivity);
android:launchMode="singleTask" として定義されているアプリケーションに関連できますか??
C を起動するアクティビティを定義/開始する方法について要件はありますか? Cを起動するアクティビティを起動するアクティビティはどうですか?