2

OS がアクティビティに関する状態とアクティビティに関連するすべての情報 (アクティビティに関するすべての記録) を完全に忘れるのはいつですか?

つまり、バンドルが新しいインスタンスになるのはいつですか?

以下の説明を見つけましたが、この「Kill​​ing bundle」ポイントが説明されていませんか?

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/app/Activity.java#Activity.onSaveInstanceState%28android.os.Bundle %29

状態を onCreate(android.os.Bundle) または onRestoreInstanceState(android.os.Bundle) で復元できるように、アクティビティからインスタンスごとの状態を取得するために呼び出されます (このメソッドによって取り込まれた android.os.Bundle は、両方に渡されます)。このメソッドは、アクティビティが強制終了される前に呼び出されるため、後で戻ってきたときにその状態を復元できます。たとえば、アクティビティ B がアクティビティ A の前に起動され、ある時点でアクティビティ A がリソースを再利用するために強制終了された場合、アクティビティ A はこのメソッドを介してユーザー インターフェイスの現在の状態を保存する機会があり、ユーザーが戻ったときにアクティビティ A に対して、ユーザー インターフェースの状態は onCreate(android.os.Bundle) または onRestoreInstanceState(android.os.Bundle) を介して復元できます。このメソッドを、アクティビティがバックグラウンドに置かれているときや破棄の途中で常に呼び出される onPause() や、破棄前に呼び出される onStop() などのアクティビティ ライフサイクル コールバックと混同しないでください。このメソッドではなく onPause() と onStop() が呼び出される例の 1 つは、ユーザーがアクティビティ B からアクティビティ A に戻る場合です。B で onSaveInstanceState(android.os.Bundle) を呼び出す必要はありません。復元されることはないため、システムはそれを呼び出さないようにします。onPause() が呼び出され、onSaveInstanceState(android.os.Bundle) が呼び出されない場合の例は、アクティビティ B がアクティビティ A の前に起動された場合です。システムは、アクティビティ A で onSaveInstanceState(android.os.Bundle) を呼び出さないようにする場合があります。 A のユーザー インターフェイスの状態がそのまま維持されるため、B の有効期間中に t が強制終了されます。デフォルトの実装では、ID を持つ階層内の各ビューで android.view.View.onSaveInstanceState() を呼び出し、現在フォーカスされているビューの ID を保存することにより (すべてのonRestoreInstanceState(android.os.Bundle)) のデフォルト実装によって復元されます。このメソッドをオーバーライドして、個々のビューによってキャプチャされていない追加情報を保存する場合は、デフォルトの実装を呼び出す必要があります。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。呼び出された場合、このメソッドは onStop() の前に発生します。onPause() の前または後に発生するかどうかについての保証はありません。ID を持つ階層内の各ビューで onSaveInstanceState() を実行し、現在フォーカスされているビューの ID を保存します (これらはすべて onRestoreInstanceState(android.os.Bundle) のデフォルト実装によって復元されます)。このメソッドをオーバーライドして、個々のビューによってキャプチャされていない追加情報を保存する場合は、デフォルトの実装を呼び出す必要があります。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。呼び出された場合、このメソッドは onStop() の前に発生します。onPause() の前または後に発生するかどうかについての保証はありません。ID を持つ階層内の各ビューで onSaveInstanceState() を実行し、現在フォーカスされているビューの ID を保存します (これらはすべて onRestoreInstanceState(android.os.Bundle) のデフォルト実装によって復元されます)。このメソッドをオーバーライドして、個々のビューによってキャプチャされていない追加情報を保存する場合は、デフォルトの実装を呼び出す必要があります。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。呼び出された場合、このメソッドは onStop() の前に発生します。onPause() の前または後に発生するかどうかについての保証はありません。デフォルトの実装を呼び出したいと思うでしょう。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。呼び出された場合、このメソッドは onStop() の前に発生します。onPause() の前または後に発生するかどうかについての保証はありません。デフォルトの実装を呼び出したいと思うでしょう。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。呼び出された場合、このメソッドは onStop() の前に発生します。onPause() の前または後に発生するかどうかについての保証はありません。

4

1 に答える 1

1

これが発生する可能性がある多くのケースがあります:

これは、アクティビティの再作成に関するさまざまなユースケースについて言及している参照に関する小さなトピックです。

アプリケーションのライフサイクルをより細かく制御したい場合:

詳細については、アプリケーションオブジェクトを参照してください。

個人的なアドバイス:

いつ/何を気にする必要はないと思います。これはAndroidシステムが管理するものであり、すべてのユースケースを処理するようにコードを最適化する必要があります(バンドルがnullになるかどうか)。バンドルは、状態保持を処理するためにのみ使用する必要があります。データを永続化したい場合は、fileI/O、SQLlite、または共有設定を確認する必要があります。

于 2013-08-22T14:05:42.653 に答える