アプリのリセットの意味を指定してください。
電源ボタンを押すと、アプリが停止する可能性があります。そのため、アプリを停止した(一時停止でonStart()
はない)後に呼び出されることがあります。
それを考えると、あなたが説明する3番目のシナリオが最初の2つの組み合わせであるというのは本当ですか?つまり、 3番目のシナリオでアプリを一時停止するにはどうすればよいですか?
コメントに関する更新:アクティビティの停止とアクティビティの破棄には違いがあります。
ローテーションは構成の変更です。このシナリオでは、アクティビティが破棄されて再作成されます。onRetainNonConfigurationInstance()
コールバックとメソッドを介して必要な場合(状況によって異なります)、このケースを個別に処理できますgetLastNonConfigurationInstance()
。Androidは、、、をこの順序で呼び出しonPause()
、次にetcを続行します。その間、イベントは処理されないため、イベントが失われることはありません。onStop()
onRetainNonConfigurationInstance()
onDestroy()
onCreate()
ほとんどの場合、コードの一部が間違ったコールバックに配置されているため、3番目のシナリオでは、何かが初期化/添付されません/ ...これは、コードと例外(例外の場合)なしではわかりません。 )。
次のように進めることをお勧めします。
- ライフサイクルの理解を完了し、正確に(作成、開始、再開、再開、一時停止、停止、破棄)
- コードを完成させて、他のライフサイクルコールバックもログメッセージでオーバーライドし(スーパークラスのコールバックを呼び出すことを忘れないでください)、一時停止、停止、ローテーション、および組み合わせを分析します
- クラッシュのポイントを特定する
- アクティビティライフサイクルと併せて、クラッシュに関係するオブジェクトのライフサイクルを分析します
または、もちろん、ここにいくつかのコードと例外を投稿することもできます。
アップデート2AVDでテストを行いました。私は次のことを観察しました:
AVDが横向きで、電源ボタンを押すと、アプリは縦向きへの構成変更を受け取ります(おそらく、縦向きのみのロック画面が引き継ぐためです)。もう一度電源を入れてAVDのロックを解除すると、アプリは構成の変更を再び横向きに戻します。
問題を解決していませんが、コードをそれぞれのコールバックに慎重に配置する必要があることを示しています。上記の場合、再作成されている間、アクティビティは表示されないためです。
質問を更新する場合は、コメントを送ってください。