news 2026/6/25 2:56:14

kotlin创建和启动协程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kotlin创建和启动协程

GlobalScope.launch启动的协程默认运行在Default调度器上

关键说明

  • 默认调度器‌:当使用GlobalScope.launch { ... }且‌未显式指定调度器‌时,协程使用Dispatchers.Default作为其调度器。‌
  • Dispatchers.Default是一个‌共享的后台线程池‌,适用于‌CPU 密集型任务‌(如计算、数据处理等)。
  • Dispatchers.Default不是主线程,不会阻塞 UI 线程,适合在后台执行耗时计算。

示例验证

GlobalScope.launch { println("Thread: ${Thread.currentThread().name}") // 输出线程名称通常包含 "DefaultDispatcher-worker-" }

注意事项

  • 不推荐在生产代码中使用 GlobalScope‌,因为它创建的协程生命周期与应用一致,容易导致‌内存泄漏‌或‌资源泄露‌。应优先使用作用域(如lifecycleScopeviewModelScope或自定义CoroutineScope)来管理协程生命周期。
  • 若需执行 IO 操作,应显式切换到Dispatchers.IO;若需更新 UI,则应使用Dispatchers.Main

总结

  • 默认调度器‌:Dispatchers.Default
  • 适用场景‌:后台 CPU 密集型任务
  • 最佳实践‌:避免直接使用GlobalScope,改用结构化并发的作用域管理协程。

lifecycleScope.launch启动的协程默认运行在.Main.immediate调度器上

关键说明

  • 默认调度器‌:lifecycleScope是 Android Jetpack 提供的生命周期感知协程作用域,其底层协程上下文(CoroutineContext)默认包含SupervisorJob()+Dispatchers.Main.immediate‌。
  • Dispatchers.Main.immediateDispatchers.Main一样运行在主线程;
  • Dispatchers.Main.immediate更高效‌:如果当前已在主线程,则立即执行;否则排队等待主线程空闲。
  • 生命周期绑定‌:协程会随Activity/FragmentonDestroy()自动取消,避免内存泄漏。

实践建议

  • 若需执行耗时操作(如网络请求、文件读写),应显式切换调度器:
    lifecycleScope.launch { val data = withContext(Dispatchers.IO) { fetchData() } textView.text = data // 切回主线程更新 UI }
  • 不要‌在lifecycleScope.launch { }中直接执行阻塞主线程的操作,否则会导致 UI 卡顿。

总结:‌默认在主线程(Dispatchers.Main.immediate),耗时任务需手动切换到Dispatchers.IODispatchers.Default‌。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 12:32:46

自动驾驶感知基石:激光雷达外参标定全流程解析

1. 激光雷达外参标定的核心价值 当你第一次看到自动驾驶车辆顶部旋转的激光雷达时,可能不会想到这个看似简单的装置背后藏着多少精密的数学运算。激光雷达外参标定就像给机器人装上"空间感知眼镜"——如果眼镜戴歪了,看到的世界就会失真。在实…

作者头像 李华
网站建设 2026/4/13 12:31:15

RexUniNLU完整教程:从环境部署到API服务,打造专属NLU应用

RexUniNLU完整教程:从环境部署到API服务,打造专属NLU应用 1. 认识RexUniNLU:零样本自然语言理解框架 RexUniNLU是一款基于Siamese-UIE架构的轻量级自然语言理解框架。与传统NLU系统不同,它最大的特点是无需标注数据即可完成意图…

作者头像 李华
网站建设 2026/4/13 12:29:32

Flutter高效局部刷新:告别setState全局闪烁

1. 为什么需要告别setState全局刷新 刚开始接触Flutter开发时,相信很多开发者都遇到过这样的场景:一个简单的倒计时功能,每次数字变化时整个页面都会闪一下。这种不流畅的体验背后,往往是因为我们习惯性地使用了setState进行全局刷…

作者头像 李华
网站建设 2026/4/13 12:29:32

gRPC远程过程调用

gRPC远程过程调用:高效通信的现代解决方案 在分布式系统和微服务架构盛行的今天,服务之间的高效通信成为关键挑战。gRPC作为一种高性能、开源的远程过程调用(RPC)框架,由Google开发并基于HTTP/2和Protocol Buffers&am…

作者头像 李华
网站建设 2026/4/13 12:29:15

如何快速掌握Vue Router 3路由配置:从入门到精通的完整指南

如何快速掌握Vue Router 3路由配置:从入门到精通的完整指南 【免费下载链接】vue-router 🚦 The official router for Vue 2 项目地址: https://gitcode.com/gh_mirrors/vu/vue-router Vue Router 3是Vue 2官方路由管理器,它让构建单页…

作者头像 李华