kotlin创建和启动协程

张开发
2026/5/6 0:06:59 15 分钟阅读
kotlin创建和启动协程
‌GlobalScope.launch启动的协程默认运行在Default调度器上‌关键说明‌默认调度器‌当使用GlobalScope.launch { ... }且‌未显式指定调度器‌时协程使用Dispatchers.Default作为其调度器。‌Dispatchers.Default是一个‌共享的后台线程池‌适用于‌CPU 密集型任务‌如计算、数据处理等。Dispatchers.Default不是主线程不会阻塞 UI 线程适合在后台执行耗时计算。示例验证GlobalScope.launch { println(Thread: ${Thread.currentThread().name}) // 输出线程名称通常包含 DefaultDispatcher-worker- }注意事项‌不推荐在生产代码中使用 GlobalScope‌因为它创建的协程生命周期与应用一致容易导致‌内存泄漏‌或‌资源泄露‌。应优先使用作用域如lifecycleScope、viewModelScope或自定义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.immediate与Dispatchers.Main一样运行在主线程Dispatchers.Main.immediate更高效‌如果当前已在主线程则立即执行否则排队等待主线程空闲。‌生命周期绑定‌协程会随Activity/Fragment的onDestroy()自动取消避免内存泄漏。实践建议若需执行耗时操作如网络请求、文件读写应显式切换调度器lifecycleScope.launch { val data withContext(Dispatchers.IO) { fetchData() } textView.text data // 切回主线程更新 UI }‌不要‌在lifecycleScope.launch { }中直接执行阻塞主线程的操作否则会导致 UI 卡顿。总结‌默认在主线程Dispatchers.Main.immediate耗时任务需手动切换到Dispatchers.IO或Dispatchers.Default‌。

更多文章