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

Posted

技术标签:

【中文标题】在 MVVM 架构 Android 中启动服务的正确位置是啥【英文标题】:What is the right place to start a service in MVVM architecture Android在 MVVM 架构 Android 中启动服务的正确位置是什么 【发布时间】:2018-04-26 05:10:01 【问题描述】:

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

Activity 不应该对数据一无所知,并且应该处理视图 ViewModel 不应该知道活动 Repository 负责获取数据

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

【问题讨论】:

有什么发现或结论吗? 不,我现在从生命周期感知组件启动服务 【参考方案1】:

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


【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 MVVM 架构 Android 中启动服务的正确位置是啥的主要内容,如果未能解决你的问题,请参考以下文章

Android中具有干净架构的mvvm和没有干净架构的mvvm有啥区别?

Android kotlin 系列讲解(进阶篇)高级项目架构模式 - MVVM

Android MVVM 架构应用实现

通过 mvvm android 处理异常

Android 架构MVC MVP MVVM+实例

《Android构建MVVM》系列 之 MVVM架构快速入门