Is it correct to bind a ViewModel to a Service?

hara picture hara · Jan 10, 2018 · Viewed 11.9k times · Source

I've started using Architecture Components in my application and I'm still learning how to use it.

In my app I have an Activity showing different Fragments sequentially. In some of them I need to communicate with a background service in order to receive data from external BLE sensors. Since I need to interact with the service in more than one Fragment, I'm wondering if ViewModel is the right place where to make the binding. I've looked around but I didn't found an answer.

Are there any problems binding a service inside a ViewModel?

Answer

Igor Bubelov picture Igor Bubelov · Feb 20, 2018

It is not advisable to use Android framework classes inside ViewModels.

Here is the link on Google Developers blog post with the detailed explanation: ViewModels and LiveData: Patterns + AntiPatterns

Ideally, ViewModels shouldn’t know anything about Android. This improves testability, leak safety and modularity. A general rule of thumb is to make sure there are no android.* imports in your ViewModels (with exceptions like android.arch.*). The same applies to presenters.

Don’t let ViewModels (and Presenters) know about Android framework classes