私はAndroidアーキテクチャからのViewModelsをしばらくの間使用しており、ViewModelをContext/Views(Android Framework/UI)に決して公開しないようにしていますが、最近、興味深いことに遭遇しました問題。
タイマーアプリを作成する場合、タイマーが開始されると、タイマーを実行しているバックグラウンドでサービスが実行されます。このように、アプリケーションが閉じられると、タイマーはすべてのタイマーが終了するまで通知バーのフォアグラウンドで実行されます。ただし、これは、すべてのTimerオブジェクトと状態がこのサービスに含まれていることを意味します。私のUIはティックごとに更新する必要がありますが、モデルを必ずしも更新する必要はありませんViewModelsはこのシナリオにどのように適合するのですか?
アクティビティはLocalBroadcastsを受け取り、毎回ViewModelに通知する必要がありますか? UI状態をService-> Activity-> VMから読み取る必要がありますか?サービスはViewModelのようですが、これは効率的ではありません。
さまざまな構造をいじってみた後、サービスはそれがMVVMに配置されていることを発見しました。この状況で私を驚かせたのは、サービスをViewModelから開始するべきではないと考えていて、2つのリポジトリが必要であるという事実でした。ステータスなど)。 ViewModelにはビューへの参照があってはなりませんが、アプリケーションコンテキストは問題ありません。したがって、ViewModelからサービスを開始するには、AndroidViewModelクラスを拡張します。これが最終的な構造です:
モデルレイヤー
ViewModel
[〜#〜] ui [〜#〜]