[解決済み] AndroidViewModel と ViewModel の比較
質問
Android Architecture Componentsライブラリの導入に伴い、以下のようないくつかの新しいクラスが導入されました。
AndroidViewModel
と
ViewModel
. しかし、この2つのクラスの違いがわからなくて困っています。その
ドキュメント
を簡潔に説明しています。
AndroidViewModel
を以下のように設定します。
アプリケーションのコンテキストを認識
ViewModel
簡潔な表現はありがたいのですが、これは具体的にどのようなことを意味しているのでしょうか。どのような場合に
AndroidViewModel
オーバー
ViewModel
とか、その逆は?
解決方法は?
AndroidViewModelはアプリケーションコンテキストを提供する
Viewmodel の内部でコンテキストを使用する必要がある場合、AndroidViewModel (AVM) を使用する必要があります。なぜなら、AVM にはアプリケーションのコンテキストが含まれているからです。コンテキストを取得するためには
getApplication()
そうでない場合は、通常のViewModel (VM)を使用してください。
AndroidViewModelは アプリケーションコンテキスト . 私たちは皆 静的なコンテキストインスタンスを持つことは、メモリリークを引き起こす可能性があるため、悪です! しかし 静的なアプリケーションインスタンスを持つことは、あなたが考えているほど悪いことではありません。 なぜなら、実行中のアプリケーションには、アプリケーションのインスタンスが1つしかないからです。
したがって、特定のクラスでアプリケーション・インスタンスを使用したり、持ったりすることは、一般的には問題ではありません。しかし、Applicationインスタンスがそれらを参照する場合、参照サイクルの問題が発生するため、問題となります。
AndroidViewModel ユニットテストでの問題点
AVMは、ユニットテストにとって問題のあるアプリケーションコンテキストを提供します。ユニットテストは、コンテキストのようなAndroidのライフサイクルのどれにも対処するべきではありません。
関連
-
[解決済み】Android Studioでパラメータ化されたユニットテストを実行すると、指定されたインクルードに対するテストが見つからないエラーが発生する
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み】フラグメントMyFragmentがアクティビティにアタッチされない。
-
[解決済み] android.support.design.widget.FloatingActionButton クラスの展開に失敗しました。
-
[解決済み] setBackgroundDrawable() 非推奨
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み】INotifyPropertyChangedとViewModelのDependencyPropertyの比較
-
[解決済み] Android ViewModelの追加引数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み】Dalvikとdalvik-cacheとは何ですか?
-
[解決済み] 設定 ':classpath' の依存関係をすべて解決できなかった。
-
[解決済み】リストビューにonclicklistenerを追加する(android)
-
[解決済み】ビューのルートとしてNULLを渡さないようにする(膨張したレイアウトのルート要素でレイアウトパラメータを解決する必要がある)。
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] 起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] Android Fragment onAttach() 非推奨