26

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

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

他にどんなケースがあるの?

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

4

2 に答える 2

40

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

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

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

于 2012-03-23T21:48:35.833 に答える
20

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

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

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

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

于 2012-03-23T21:58:47.547 に答える