首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android架构组件和协程

Android架构组件和协程
EN

Stack Overflow用户
提问于 2020-06-03 04:23:51
回答 2查看 308关注 0票数 0

有很多关于架构组件、kotlin和协程的信息,但我找不到一个将所有这些东西结合在一起的示例。我正在苦苦思索如何结合使用here和协程来使用安卓的架构组件。我有一个想法,但我不确定这是否是实现这种架构风格的正确方式。我尝试将视图模型+存储库模式与复古拟合和协程结合使用。

我有以下存储库:

代码语言:javascript
复制
class FooRepostiroy(private val fooHttpService: FooHttpService) {
   suspend fun someMethod() : SomeResult {
       val response = fooHttpService.someRemotCall() // which is also a suspending method using retrofit-2
       // process response, store it using room and return SomeResult data object

然后我使用ViewModel中的FooRepository,但是因为someMethod是一个挂起的方法,所以我需要将它包装在一个协程作用域中:

代码语言:javascript
复制
class FooViewModel(private val fooRepositoru : FooRepository) : ViewModel() {
    private var someMethodJob : Job? = null
    val result : MutableLiveData<SomeResult> = MutableLiveData()

    fun someMethod() {
        someMethodJob = viewModelScope.launch {
            result.value = fooRepositoru.someMethod()
        }
    }

    override fun onCleared() {
        super.onCleared()
        someMethodJob?.cancel()
    }

然后,在片段或活动中,我可以观察视图模型的结果

代码语言:javascript
复制
    fooViewModel.result.observe(viewLifecycleOwner, Observer {

从我的存储库层开始,下面的一切都可以是一个挂起的函数。然后,从视图模型中,我可以调用任何挂起函数,但在我的视图模型中永远不会有公开公开的挂起函数。这是将协程与视图模型架构结合在一起的正确或适当的方式吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-03 05:19:52

这是将协程与视图模型架构结合的正确或适当的方式吗?

是!

每个ViewModel实例都有自己的ViewModelScope

ViewModelScope的目的是在该ViewModel的生命周期中运行作业,并在ViewModel的父Activity/Fragment被破坏的情况下自动取消正在运行的协程作业。

销毁ViewModel时,ViewModelScope下运行的任何作业都将被取消。

阅读更多here

票数 0
EN

Stack Overflow用户

发布于 2020-06-05 16:33:22

私有变量someMethodJob : Job?=空值结果: MutableLiveData = MutableLiveData() fun someMethod() { someMethodJob = viewModelScope.launch { result.value = fooRepositoru.someMethod() }}

你可以去掉所有的,然后说

代码语言:javascript
复制
val result: LiveData<SomeResult> = liveData {
    emit(fooRepository.someMethod())
}

然后观察result

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62160808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档