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

Android 在MVVM架构中,什么是启动服务的正确位置,android,mvvm,kotlin,Android,Mvvm,Kotlin,我刚开始在Android上使用MVVM架构。我有一个服务,基本上可以获取一些数据并更新UI,这就是我从MVVM中了解到的: 活动不应该知道关于数据的任何信息,应该关注视图 ViewModels不应了解活动 存储库负责获取数据 现在,由于ViewModels不应该知道有关活动的任何信息,活动除了处理视图之外不应该做任何事情,有人能告诉我应该在哪里启动服务吗?据我所知,服务与Android相关,因此,它们可以从视图(活动/片段/生命周期所有者)启动。在MVVM中,理想情况下,启动服务的方法应该在

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

  • 活动不应该知道关于数据的任何信息,应该关注视图
  • ViewModels不应了解活动
  • 存储库负责获取数据

现在,由于ViewModels不应该知道有关活动的任何信息,活动除了处理视图之外不应该做任何事情,有人能告诉我应该在哪里启动服务吗?

据我所知,服务与Android相关,因此,它们可以从视图(活动/片段/生命周期所有者)启动。

在MVVM中,理想情况下,启动服务的方法应该在
存储库中定义,因为它有责任与数据源交互
ViewModel
保留
存储库的一个实例
,并负责调用
存储库
方法并更新自己的
LiveData
,该方法可能是
ViewModel
的成员
View
保存
ViewModel
的一个实例,它观察
ViewModel
LiveData
,并相应地对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
    }
}

类采样器位置{
fun getInstance():SampleRepository{
//SampleRepository的返回实例
}
fun getDataFromService():LiveData{
//启动一些服务并返回LiveData
}
}
类SampleViewModel{
private val samplePository=samplePository.getInstance()
私有变量sampleLiveData=MutableLiveData()
//sampleLiveData的getter
fun getSampleLiveData():LiveData=sampleLiveData
趣味startService(){
sampleLiveData.postValue(SamplePository.getDataFromService())
}
}
类示例视图{
私有变量sampleViewModel:sampleViewModel
//对于活动,此SampleMethod通常是它们的onCreate()方法
有趣的抽样方法(){
//实例化sampleViewModel
sampleViewModel=ViewModelProviders.of(this.get)(sampleViewModel::class.java)
//观察sampleViewModel的实时数据
sampleViewModel.getSampleLiveData().observe(viewLifecycleOwner,Observer{newData->
//使用newData在此处更新UI
}
}

有什么发现或结论吗?没有,我现在正从一个生命周期感知组件启动服务