【问题标题】:What is the reason behind viewModelScope defaulting to MainThread?viewModelScope 默认为 MainThread 的原因是什么?
【发布时间】:2020-12-09 04:05:52
【问题描述】:

当大多数用例用作后台线程时,viewModelScope 默认使用 MainThread 的原因是什么?

我仍然想不出在我的项目中需要在 ViewModel 中使用主线程的示例。

另外,有没有比下面这样写更好/更短的方法?

viewModelScope.launch(Dispatchers.Default) {
   // codes here
}

【问题讨论】:

    标签: android kotlin-coroutines android-viewmodel


    【解决方案1】:

    几个原因:

    1. ViewModel 可能是最接近 UI 的层,这意味着这里的很多逻辑都涉及更新 UI => 在任何其他线程中启动将意味着您必须切换回 Main 来更新内容
    2. 使用任何其他调度程序意味着,人们知道 VM 中会发生什么样的操作(比如 IO 操作或某些计算?)

    总的来说,我认为这是一个很好的做法,不在您的 VM 中处理线程切换并在层上进行处理,这基本上知道将运行什么样的操作。 例如,如果您有一个 VM -> 存储库 -> LocalSource(数据库操作)和 RemoteSource(网络),那么我会在远程和本地源中切换到 IO 线程。

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 2014-12-14
      • 1970-01-01
      • 2015-10-17
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多