【问题标题】:Which coroutine scope to use when rotating fragments? Can we launch a coroutine from a viewmodel?旋转片段时使用哪个协程范围?我们可以从视图模型中启动协程吗?
【发布时间】:2021-07-13 22:11:17
【问题描述】:

在片段中,当通过协程执行保存操作时,应该使用哪种类型的范围主要考虑旋转设备不应该停止协程?

我应该将协程 Job 引用保存在哪里,以允许用户在仍在执行时随时取消它?即使在旋转之后,如果需要?如果我将作业放在ViewModel 中以便在设备rotation 之后恢复它,是否会泄漏片段的lifecycleScope

我知道一个片段有一个范围,例如:

fragment.lifecycleScope.launch(context = Dispatchers.IO)

但我不确定这是否正确,因为我认为旋转设备可能会取消它。

另外,我不确定下一个是否正确:

CoroutineScope(Dispatchers.IO)

【问题讨论】:

    标签: android rotation fragment kotlin-coroutines android-jetpack


    【解决方案1】:

    ViewModel 中,你可以在launch {} 使用viewmodelscope 的协程中点赞“-

    viewModelScope.launch {
        // Coroutine that will be canceled when the ViewModel is cleared.
    }
    

    然后您可以使用 liveDatafragment 通信,因为 liveData 和 viewmodel 都具有生命周期意识,它也可以处理旋转场景。

    它应该可以解决你的目的。

    要使用viewModelScope,我们需要生命周期版本2.2.0 及更高版本

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      • 2021-02-01
      • 2021-12-21
      • 2019-05-02
      • 2022-07-25
      • 1970-01-01
      相关资源
      最近更新 更多