SavedInstanceStateバンドルがアクティビティでいつ使用されるかについての完全なリストを知っている人はいますか?
デバイスの向きが変わったときに使用されます。ただし、ユーザーがAndroid設定からアプリを強制的に閉じた場合は使用されないようですが、これは私のコードに原因がある可能性があります。
他にどんなケースがありますか?
明確に言うと、「使用済み」とは、onCreate()
が呼び出されたときに、savedInstanceStateバンドルがnullではなく、前回onSaveInstanceState()
が呼び出されたときに渡されたデータが含まれていることを意味します。
OSによってアクティビティが強制終了された場合に使用されます(例:アクティビティがバックグラウンドにあり、別のタスクがリソースを必要とする場合)。これが発生すると、onSaveInstanceState(Bundle outstate)
が呼び出され、outstate
に保存する状態データを追加するかどうかはアプリに依存します。
ユーザーがアクティビティを再開すると、onCreate(Bundle savedInstanceState)
が呼び出され、上記のシナリオでアクティビティが終了した場合、savedInstanceState
はnull以外になります。その後、アプリはsavedInstanceState
からデータを取得し、アクティビティの状態を、ユーザーが最後に見たときの状態に再生成できます。
基本的にonCreate
では、savedInstanceState
がnullの場合、これはアクティビティの「新規」起動であることを意味します。そして、それがnullでない場合(アプリがonSaveInstanceState(...)
にデータを保存した場合)、アクティビティの状態を再作成する必要があることを意味します。
onSaveInstanceState
は、アプリケーションの有効期間中のみ(つまり、一時的に)データを保存するために使用されます
データがメモリに保持されるのは、アプリケーションがアクティブになるまでです。つまり、このデータはアプリケーションが閉じるときに失われるため、アプリケーションを強制的に閉じる場合、onSaveInstanceState
は使用されません。
たとえば、アプリケーションがまだ生きている間に操作を行った場合にのみ呼び出すことができます。画面の向きを変更しても、アクティビティはそのままなので、onSaveInstanceState
が呼び出されます。
ただし、データを永続的に保存する場合は、SharedPreferences
およびSQLite database
を使用する必要があります。