web-dev-qa-db-ja.com

AndroidViewModel vs ViewModel

Android Architecture Componentsライブラリの導入により、AndroidViewModelViewModelなど、いくつかの新しいクラスが導入されました。ただし、これら2つのクラスの違いを理解するのは困難です。 documentation は、次のようにAndroidViewModelを簡潔に説明しています。

アプリケーションコンテキスト認識ViewModel

簡潔に感謝しますが、これが正確に意味するものは何ですか? AndroidViewModelではなくViewModelを使用することを選択する必要があるのはいつですか?

104
cascal

ビューモデル内でコンテキストを使用する必要がある場合は、AndroidViewModelを使用する必要があります。これにはアプリケーションコンテキストが含まれているため(コンテキスト呼び出しgetApplication()を取得する)、そうでない場合は通常のViewModelを使用します。

編集

AndroidViewModelにはApplication Contextがあります。私たちは皆知っています静的なContextインスタンスを持っているのは悪です!(メモリリークを引き起こす可能性があります!!)

しかし、静的なアプリケーションインスタンスを持つことはあなたが考えるより悪くない

実行中のアプリケーションにはApplicationインスタンスが1つしかないためです。

そのため、特定のクラスでApplicationインスタンスを使用することは、一般的に問題ではありません。

ただし、アプリケーションインスタンスがそれらを参照する場合、参照サイクルの問題のために問題になります。

アプリケーションインスタンスについても参照

146
Alex