当前位置: 首页 > news >正文

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‌。

http://www.jsqmd.com/news/634112/

相关文章:

  • 在openEuler 22.03 LTS上,手把手搞定昇腾910B驱动、固件和MCU升级(附脚本)
  • Qwen-Image-2512-SDNQ实战:快速生成社交媒体封面图,效果惊艳
  • 2026年热门中职院校推荐,聚焦专业特色与学生发展的优质学校 - 工业品牌热点
  • 终极Transformer部署指南:从训练到生产环境的完整流程
  • 如何用GetQzonehistory一键备份QQ空间:5步永久保存青春记忆的终极指南
  • 系统设计注意事项
  • 数据结构 - 树
  • 3步掌握PyBroker:Python量化交易与机器学习框架完全指南
  • 桐庐昱华教育性价比怎样,多维度解读其实力 - mypinpai
  • BiliTools终极指南:免费高效的B站资源下载与AI总结神器
  • 永久冻结IDM试用期:开源脚本如何让30天试用变成无限期?
  • 游戏资源逆向工程:深度解析碧蓝航线Live2D资源提取技术
  • 2026最强B站资源下载指南:BiliTools跨平台工具箱使用全解析
  • 为什么92%的AIAgent在长周期任务中“学废了”?:解构记忆-策略-反馈三通道耦合失配问题及实时校准协议
  • 终极Axure RP汉化指南:4步快速实现中文界面
  • 技术判断力之AI三问粗
  • 性价比高的北亚牧业猪饲料厂家产品盘点,好用吗值得选吗 - 工业推荐榜
  • 五层协议体系结构详解:如何在实际项目中应用各层功能(含常见错误排查指南)
  • 终极指南:如何让Masa Mods在Minecraft 1.21中完美显示中文界面
  • OpCore-Simplify:零门槛黑苹果配置的革命性解决方案
  • 猫抓浏览器扩展:一键抓取网页视频资源的终极解决方案
  • 项目介绍 MATLAB实现基于长短期记忆网络(LSTM)进行多变量单步光伏功率预测的详细项目实例(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力
  • 可靠的线束加工实力厂商探讨,船舶线束加工工艺优化方法 - myqiye
  • Hunyuan-MT-7B功能体验:支持藏蒙维哈朝5种少数民族语言
  • 终极Go微服务架构解析:从单体到分布式系统的完整演进指南
  • OpCore Simplify终极教程:如何用智能工具3小时搭建稳定黑苹果系统
  • 国内用户升级 ChatGPT Plus / Pro、Claude Pro / Max / Max+的实测攻略
  • DocToc高级用法:预提交钩子、Docker部署与团队协作完整指南
  • Minecraft跨平台世界转换终极指南:如何使用Chunker实现Java版与基岩版存档互转
  • Sambert中文语音合成实战:一键部署,轻松生成带情感的AI语音