アクティビティが停止状態になると、システムが onSaveInstanceState() を呼び出すのはなぜですか?
アクティビティのインスタンスは停止時にメモリに常駐しているため、現在の状態はアクティビティが破棄されたときにのみ失われます。
したがって、システムは、 onStop() ではなく、 onDestroy() に入る前または内部で onSaveInstanceState() を呼び出す必要があります。
ではない?
アクティビティが停止状態になると、システムが onSaveInstanceState() を呼び出すのはなぜですか?
アクティビティのインスタンスは停止時にメモリに常駐しているため、現在の状態はアクティビティが破棄されたときにのみ失われます。
したがって、システムは、 onStop() ではなく、 onDestroy() に入る前または内部で onSaveInstanceState() を呼び出す必要があります。
ではない?
が呼び出されることが保証されていないためonDestroy()
(通常は、アクティビティの場合のみfinish()
)、 の後onStop()
にアクティビティが残ることが保証されていないためです。フォアグラウンド アクティビティでなくなると、さまざまな理由で破棄される可能性があります。
私はいつも、 の後onPause()
、次のコールバックが行われる可能性があると想定していonCreate()
ます。
onSaveInstanceState
フラグメント/アクティビティのビュー ステートとカスタム インスタンス データを保存します。ビュー オブジェクトは の後に破棄される可能性があり、破棄されるonStop
ためonSaveInstanceState
、状態を保持するには を呼び出す必要があります。
これについては、次のドキュメントでActivity.onSaveInstanceState
説明されています。
onSaveInstanceState()
デフォルトの実装は、ID を持つ階層内の各ビューを呼び出し、現在フォーカスされているビューの ID を保存することにより、インスタンスごとの UI 状態の大部分を処理します (これらはすべて、デフォルトの実装によって復元されます)。onRestoreInstanceState(Bundle)
このメソッドをオーバーライドして、個々のビューによってキャプチャされていない追加情報を保存する場合は、デフォルトの実装を呼び出したいと思うでしょう。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。
アクティビティの状態に関する追加データを保存するには、onSaveInstanceState() コールバック メソッドをオーバーライドする必要があります。システムは、ユーザーがアクティビティを離れるときにこのメソッドを呼び出し、アクティビティが予期せず破棄された場合に保存される Bundle オブジェクトを渡します。システムが後でアクティビティ インスタンスを再作成する必要がある場合は、同じ Bundle オブジェクトを onRestoreInstanceState() メソッドと onCreate() メソッドの両方に渡します。