Android Kotlin 协程 Dispatchers 有哪些值

更新日期: 2021-02-20 阅读次数: 188 字数: 285 分类: Android

Dispatchers 有哪些值

  • Dispatchers.Main:Android 主线程。用于调用 suspend 函数,UI 框架操作,及更新 LiveData 对象。
  • Dispatchers.IO:非主线程。用于磁盘操作(例如,Room 操作),及网络 I/O 请求(例如,调用服务器 API)。
  • Dispatchers.Default:非主线程,用于 CPU 密集型操作。例如,list 排序,及 JSON 解析。

这里需要注意的是,在 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 线程就平滑多了。

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊, 查看更多联系方式。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。同时也欢迎关注我的微信公众号“大象工具”: 大象工具微信公众号

相关文章

爱评论不评论

近期节日

查看更多节日