web-dev-qa-db-ja.com

onCreateとonRestoreInstanceStateの使用

技術的に、onRestoreInstanceStateを使用する必要がある理由はありますか? onCreateバンドルがnullかどうかを確認して、savedInstanceStateのすべての復元を実行できませんか? onRestoreInstanceStateですべてを行うよりもonCreateを使用する主な利点は何ですか?

29
Sean Hill

onRestoreInstanceState

このメソッドは、アクティビティが以前に保存された状態から再初期化されるときにonStart()の後に呼び出されます。ここでは、saveedInstanceStateで指定されています。ほとんどの実装では、単にonCreate(Bundle)を使用して状態を復元しますが、初期化がすべて完了した後、またはサブクラスがデフォルトの実装を使用するかどうかを決定できるようにするために、ここで実行すると便利な場合があります。

onRestoreInstanceStateは、アクティビティのライフサイクルでもnull以外のBundleオブジェクトを受け取ることを保証しますonStartの後でも呼び出されますonCreate:常にBundleオブジェクトはnullであるか、構成の変更を判別しないため、前に呼び出されますonStartです。そのため、それはすべてあなた次第であり、ニーズに依存します。

28

ほとんどの場合、私はonCreate(Bundle)を使用してアクティビティ状態を復元する傾向がありますが、初期化の後に状態を復元したい場合は、サブクラスによって状態を復元するための柔軟性を提供するonRestoreInstanceState()を使用する方が適切です。アクティビティ。また、onRestoreInstanceState()はonStart()の後に呼び出されますが、onCreate(bundle)はその前に呼び出されます。

巨大なデータがある場合は、UIコントローラーロジックを処理するViewModelクラスを実装できます。 ViewModelオブジェクトは、構成の変更時に自動的に保持されるため、オブジェクトが保持するデータは、次のアクティビティまたはフラグメントインスタンスですぐに利用できます。たとえば、アプリでユーザーのリストを表示する必要がある場合は、アクティビティやフラグメントではなく、ユーザーのリストを取得して保持する責任をViewModelに割り当ててください。また、UIロジックの過度の責任を処理するのではなく、デカップリングを提供し、アクティビティまたはフラグメントが単一の目的を果たすようにします。

0
Ajay Deepak

私の意見では、このドキュメント 保存されたインスタンス状態を使用してアクティビティUI状態を復元する を見ることができます。

ここにいくつかのポイントがあります

1. onCreate()とonRestoreInstanceState()の両方のコールバックメソッドが、インスタンスの状態情報を含む同じバンドルを受け取ります。

2. onCreate()中に状態を復元する代わりに、システムがonStart()メソッドの後に呼び出すonRestoreInstanceState()を実装することを選択できます。システムはonRestoreInstanceState()を呼び出すのは、復元する保存済みの状態がある場合のみであるため、バンドルがnullであるかどうかを確認する必要はありません。

0
gin.tama