web-dev-qa-db-ja.com

savedInstanceStateバンドルが実際に使用されるのはいつですか?

SavedInstanceStateバンドルがアクティビティでいつ使用されるかについての完全なリストを知っている人はいますか?

デバイスの向きが変わったときに使用されます。ただし、ユーザーがAndroid設定からアプリを強制的に閉じた場合は使用されないようですが、これは私のコードに原因がある可能性があります。

他にどんなケースがありますか?

明確に言うと、「使用済み」とは、onCreate()が呼び出されたときに、savedInstanceStateバンドルがnullではなく、前回onSaveInstanceState()が呼び出されたときに渡されたデータが含まれていることを意味します。

25
howettl

OSによってアクティビティが強制終了された場合に使用されます(例:アクティビティがバックグラウンドにあり、別のタスクがリソースを必要とする場合)。これが発生すると、onSaveInstanceState(Bundle outstate)が呼び出され、outstateに保存する状態データを追加するかどうかはアプリに依存します。

ユーザーがアクティビティを再開すると、onCreate(Bundle savedInstanceState)が呼び出され、上記のシナリオでアクティビティが終了した場合、savedInstanceStateはnull以外になります。その後、アプリはsavedInstanceStateからデータを取得し、アクティビティの状態を、ユーザーが最後に見たときの状態に再生成できます。

基本的にonCreateでは、savedInstanceStateがnullの場合、これはアクティビティの「新規」起動であることを意味します。そして、それがnullでない場合(アプリがonSaveInstanceState(...)にデータを保存した場合)、アクティビティの状態を再作成する必要があることを意味します。

39
triad

onSaveInstanceStateは、アプリケーションの有効期間中のみ(つまり、一時的に)データを保存するために使用されます

データがメモリに保持されるのは、アプリケーションがアクティブになるまでです。つまり、このデータはアプリケーションが閉じるときに失われるため、アプリケーションを強制的に閉じる場合、onSaveInstanceStateは使用されません。

たとえば、アプリケーションがまだ生きている間に操作を行った場合にのみ呼び出すことができます。画面の向きを変更しても、アクティビティはそのままなので、onSaveInstanceStateが呼び出されます。

ただし、データを永続的に保存する場合は、SharedPreferencesおよびSQLite databaseを使用する必要があります。

20
Arif Nadeem