Android Architecture Componentsライブラリの導入により、AndroidViewModel
やViewModel
など、いくつかの新しいクラスが導入されました。ただし、これら2つのクラスの違いを理解するのは困難です。 documentation は、次のようにAndroidViewModel
を簡潔に説明しています。
アプリケーションコンテキスト認識
ViewModel
簡潔に感謝しますが、これが正確に意味するものは何ですか? AndroidViewModel
ではなくViewModel
を使用することを選択する必要があるのはいつですか?
ビューモデル内でコンテキストを使用する必要がある場合は、AndroidViewModelを使用する必要があります。これにはアプリケーションコンテキストが含まれているため(コンテキスト呼び出しgetApplication()を取得する)、そうでない場合は通常のViewModelを使用します。
AndroidViewModelにはApplication Contextがあります。私たちは皆知っています静的なContextインスタンスを持っているのは悪です!(メモリリークを引き起こす可能性があります!!)
しかし、静的なアプリケーションインスタンスを持つことはあなたが考えるより悪くない
実行中のアプリケーションにはApplicationインスタンスが1つしかないためです。
そのため、特定のクラスでApplicationインスタンスを使用することは、一般的に問題ではありません。
ただし、アプリケーションインスタンスがそれらを参照する場合、参照サイクルの問題のために問題になります。