Android Kotlin 协程 Dispatchers 有哪些值

发布时间: 2021-02-07 09:35:29 作者: 大象笔记

根据具体的场景和需求选择合适的调度器非常重要,这样可以更好地平衡应用的性能和用户体验。

Dispatchers 有哪些值

这里需要注意的是,在 launch 不加参数时,其默认值是 Dispatchers.Main,而不是 Dispatchers.Default。

Dispatchers.IO 的作用

如果不传递 Dispatchers.IO 参数给 launch,则 coroutine 将运行在主线程 (main thread) 中,而不是 I/O 专用的线程中。即,launch 在不加参数时,其默认值是 Dispatchers.Main。

代码示例

viewModelScope.launch(Dispatchers.IO) {
    // do something,例如 Room 数据库操作
}

最好是指明 Dispatchers 类型,增加代码可读性。

真实的反面案例

我在 Main Activity 中使用

lifecycleScope.launch

执行了一段数据库操作,及 canvas 生成图片操作。且没有指定 Dispatchers,有明显的卡顿现象。

Android Studio 的日志里有提示:

I/Choreographer: Skipped 39 frames! The application may be doing too much work on its main thread.

看来在主线程中执行这些操作确实不合适,我换成 IO 线程就平滑多了。

我是一名山东烟台的开发者,联系作者