Fragment#setRetainInstance(boolean) を使用する理由について言及しています。
私がそのようにお願いする理由は、Activity
ローテーションを処理するためです。公式アクティビティ ドキュメントActivity
では、ローテーション中にシャットダウンして再起動することを推奨しています。
android:configChanges アクティビティがそれ自体で処理する構成変更を一覧表示します。実行時に構成の変更が発生すると、アクティビティはデフォルトでシャットダウンされて再開されますが、この属性を使用して構成を宣言すると、アクティビティが再開されなくなります。代わりに、アクティビティは実行されたままになり、その onConfigurationChanged() メソッドが呼び出されます。注: この属性の使用は避け、最後の手段としてのみ使用してください。構成の変更による再起動を適切に処理する方法の詳細については、ランタイムの変更の処理を参照してください。
このアクティビティのデフォルトの動作を変更しようとする試みは、悪い習慣のようです。再起動中にアクティビティが時間のかかるデータ構造をリロードするのを避けるために、 と を使用onRetainNonConfigurationInstance
しgetLastNonConfigurationInstance
ます。-公式処理ランタイムの変更
ただし、Fragment でのローテーションの処理に関しては、Google は別の推奨事項を提供していますか? Fragment をシャットダウンして再起動することを望まないのですか?
public Object onRetainNonConfigurationInstance ()
このメソッドは、API レベル 13 で廃止されました。代わりに、新しい Fragment API setRetainInstance(boolean) を使用してください。これは、Android 互換性パッケージを通じて古いプラットフォームでも利用できます。
- ローテーション中にアクティビティをシャットダウンして再起動することを Google が推奨するのに、ローテーション中にフラグメントを保持することを推奨するのはなぜですか?
- がローテーションの処理に優れている場合
setRetainInstance(true)
、Google はそれを Fragment のデフォルトの動作にしないのはなぜですか?