これらのメソッドは、アクティビティのライフサイクルのどこに適合しますか?
OnSaveInstanceState は、アクティビティが強制終了または再起動される直前に呼び出されます (たとえば、メモリ不足または構成変更の b/c)。これは、アクティビティがフォーカスを失ったときに呼び出される onPause とは異なることに注意してください (たとえば、別のアクティビティに移行した場合)。
通常、onSaveInstanceState は onPause の後、onStop の前に呼び出されますが、常にではありません。たとえば、[戻る] を押すと、アクティビティが破棄され (finish() の呼び出しなど)、状態を保存する必要がないため、onSaveInstanceState は呼び出されません。では、onPause で状態を保存しないのはなぜでしょうか? アクティビティがフォーカスを失ったからといって、アクティビティが強制終了されたわけではありません。それは今でも記憶に残っています。基本的に、一時停止するたびに状態を保存するのではなく、一時停止して非表示になるとき (つまり、フォアグラウンドからバックグラウンドに移動するとき) に状態を保存します。
では、onPause で何をすべきでしょうか。理想的には、ネットワーク接続、地理情報や加速度計のオフ、ビデオの一時停止など、バッテリーを消耗するリソースを解放する必要があります (これらはすべてアプリによって異なります)。そして、ご想像のとおり、アクティビティがフォーカスを得たときに呼び出される onResume でこれらのリソースを復元します。
onCreate と onRestoreInstanceState は相互に排他的ですか?
onCreate で簡単に状態を復元できるため、onRestoreInstanceState は冗長です。
onRestoreInstanceState についての公式ドキュメントの説明は次のとおりです。
ほとんどの実装は単に onCreate(Bundle) を使用して状態を復元しますが、すべての初期化が完了した後にここで行うか、サブクラスがデフォルトの実装を使用するかどうかを決定できるようにすることが便利な場合があります。
そのため、ベスト プラクティスとして、onCreate でビュー階層をレイアウトし、onRestoreInstanceState で以前の状態を復元します。これを行うと、Activity をサブクラス化する人は誰でも onRestoreInstanceState をオーバーライドして、復元状態ロジックを拡張または置換できます。これは、onRestoreInstanceState がテンプレート メソッドとして機能するとは言い過ぎです。
アクティビティが破棄されたときに onRestoreInstanceState が呼び出されますか? これは何を意味するのでしょうか?
これは 1 で部分的に回答されました。はい、システムがアクティビティを破棄しようとしているときに onRestore が呼び出されます。システムは、メモリが不足している場合、またはユーザーがアプリケーションを明示的に閉じた場合 (ナビゲーション バーの最近のものからスワイプして削除するなど)、または構成が変更された場合 (ランドスペースからポートレートへなど) にアクティビティを破棄します。
Android がこのように設計されているのはなぜですか (デスクトップ アプリとは異なります)? モバイル システムでは、リソース管理がバッテリ寿命の深刻な問題であるためです。そのため、アプリのライフサイクルにフックを提供して、アプリがシャットダウンまたはフォーカスの喪失の間に状態をきれいに保存および復元できるようにすると同時に、ユーザーに対して完全に透過的にする必要があります。
onRestoreInstanceState は、Jelly Bean のインストルメンテーションからのみ呼び出されるようです。これはアクティビティのライフサイクルとは関係ありませんか?
この質問がわかりません。あなたはそれを言い換えることができますか?