在MVVM架构Android中启动服务的正确位置是什么

Joi*_*ois 7 android mvvm kotlin

我刚开始在Android上使用MVVM架构.我有一个基本上获取一些数据并更新UI的服务,这是我从MVVM中理解的:

  • 活动不应该对数据有任何了解,应该注意观点
  • ViewModels不应该知道活动
  • 存储库负责获取数据

现在,由于ViewModels不应该对活动有任何了解,而且活动除了处理视图之外不应该做任何事情,任何人都可以告诉我应该在哪里开始服务?

Abd*_*een 6

在 MVVM 中,理想情况下,应该定义启动服务的方法,Repository因为它有责任与数据源交互。ViewModel保留 的一个实例Repository,并负责调用Repository方法并更新它自己的实例LiveData,该实例可能是 的成员ViewModelView保留一个实例,ViewModel并观察LiveDataUIViewModel并相应地更改 UI。这里有一些伪代码,可以让您更好地了解情况。

class SampleRepository {
    fun getInstance(): SampleRepository {
        // return instance of SampleRepository
    }

    fun getDataFromService(): LiveData<Type> {
        // start some service and return LiveData
    }
}

class SampleViewModel {
    private val sampleRepository = SampleRepository.getInstance()
    private var sampleLiveData = MutableLiveData<Type>()

    // getter for sampleLiveData
    fun getSampleLiveData(): LiveData<Type> = sampleLiveData

    fun startService() {
        sampleLiveData.postValue(sampleRepository.getDataFromService())
    }
}

class SampleView {
    private var sampleViewModel: SampleViewModel

    // for activities, this sampleMethod is often their onCreate() method
    fun sampleMethod() {
        // instantiate sampleViewModel
        sampleViewModel = ViewModelProviders.of(this).get(SampleViewModel::class.java)
        // observe LiveData of sampleViewModel
        sampleViewModel.getSampleLiveData().observe(viewLifecycleOwner, Observer<Type> { newData ->
            // update UI here using newData
    }
}

Run Code Online (Sandbox Code Playgroud)


小智 -1

据我所知,服务与Android相关,因此可以从视图(Activity/Fragment/Lifecycleowner)启动它们。