質問: > > The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations. > > > より とあります。 ViewModelを利用する動機の一つとして、rotateで起こるActivity再生成を超えてModelを保持できることがあるそうです。 私はこれがどのようにもたらされるのか、そして「であるならばViewModelのライフサイクルはどれくらい長いのか」を調べました。 * * * このあたりのドキュメントを参考にしたところ、 * Activityは直接ViewModelを保持しているわけではなく、ViewModelProvierによってもたらされる * ViewModelProviderは指定されたViewModelStoreOwnerを用いてViewModelをStoreする * ViewModelStoreOwnerをImplementsしているのは結局Activityである ということがわかりました。 であるならば、つまるところ、Activityが直接ViewModelを保持しているのとかわりはなく、ライフサイクルの面では何の意味もないアーキテクチャに思えます。 表題の質問に戻りますが、Activityの再生成を超えてデータを保持できる理由もわかりません。 なぜなのでしょうか
回答: 自己解決したので書きます。 rotateではActivityのdestroyとcreateを呼びはするが、Activityインスタンス自体は破棄しないからです。 つまりそもそもActivityがフィールドとして保持している値はrotateを超えて破棄されません。(onCreateで値をフォーマットしてしまわない限り!) そのActivityをViewModelStoreOwnerとして実行されるViewModelProviderも同様です。 もし仮にrotateがActivityのインスタンスを破棄"することもある"のであれば、この枠組で取り上げているViewModelも同様に破棄されます。(そのためにsavedStateという機能があります) このことは、そもそもActivityにデータ保持させるために、onCreateではなく、constructorで初期化をすれば、同様の効果を得られることを示していると思います。