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