1. ホーム
  2. android

[解決済み] AndroidViewModel と ViewModel の比較

2022-02-19 21:15:21

質問

Android Architecture Componentsライブラリの導入に伴い、以下のようないくつかの新しいクラスが導入されました。 AndroidViewModelViewModel . しかし、この2つのクラスの違いがわからなくて困っています。その ドキュメント を簡潔に説明しています。 AndroidViewModel を以下のように設定します。

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

簡潔な表現はありがたいのですが、これは具体的にどのようなことを意味しているのでしょうか。どのような場合に AndroidViewModel オーバー ViewModel とか、その逆は?

解決方法は?

AndroidViewModelはアプリケーションコンテキストを提供する

Viewmodel の内部でコンテキストを使用する必要がある場合、AndroidViewModel (AVM) を使用する必要があります。なぜなら、AVM にはアプリケーションのコンテキストが含まれているからです。コンテキストを取得するためには getApplication() そうでない場合は、通常のViewModel (VM)を使用してください。

AndroidViewModelは アプリケーションコンテキスト . 私たちは皆 静的なコンテキストインスタンスを持つことは、メモリリークを引き起こす可能性があるため、悪です! しかし 静的なアプリケーションインスタンスを持つことは、あなたが考えているほど悪いことではありません。 なぜなら、実行中のアプリケーションには、アプリケーションのインスタンスが1つしかないからです。

したがって、特定のクラスでアプリケーション・インスタンスを使用したり、持ったりすることは、一般的には問題ではありません。しかし、Applicationインスタンスがそれらを参照する場合、参照サイクルの問題が発生するため、問題となります。

アプリケーションインスタンスについてはこちらもご覧ください

AndroidViewModel ユニットテストでの問題点

AVMは、ユニットテストにとって問題のあるアプリケーションコンテキストを提供します。ユニットテストは、コンテキストのようなAndroidのライフサイクルのどれにも対処するべきではありません。