news 2026/9/14 17:08:03

kotlin 协程 入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kotlin 协程 入门

作用域

协程的结构,首个要了解的就是作用域。

val scope = CoroutineScope(Dispatchers.IO) // 创建一个作用域 fun kotlinCoroutines(){ scope.launch { // {} 内代码执行区域(又叫协程体) // do something } }

作用域一如字面意思就是可以生效的范围,为了解决以往启动一个Activity中的子线程后进行耗时操作后,即使页面已经被销毁了依然执行导致执行完毕后的回调后报错的问题。这个作用域可谓至关重要。

现在只要在页面onDestroy时调用scope.cancel()就可以中断代码的执行了。作用域的功能:生命周期管理。

override fun onDestroy() { super.onDestroy() scope.cancel() }

Android平台 提供了几种常用的提前给好的作用域:

  1. lifecycleScope:绑定 Activity/Fragment 的生命周期,会在 Lifecycle 销毁时自动取消。
  2. viewModelScope:绑定 ViewModel 的生命周期,会在 ViewModel 销毁时自动取消。

其中 val scope = CoroutineScope(Dispatchers.IO) 中的 Dispatchers常用的有以下几种:

Dispatchers.MainAndroid 主线程,用于更新 UI
Dispatchers.IO网络请求、文件读写等 IO 密集型任务
Dispatchers.Default数据计算、排序等 CPU 密集型任务。默认线程数等于 CPU 核心数

挂起函数(suspend)

简单来说 withContext(Dispatchers.Main){} 就可以切换调度器(Dispatchers)

结合起来使用举例如下:

val scope = CoroutineScope(Dispatchers.IO) fun kotlinCoroutines(){ scope.launch { // 网络请求、数据操作等耗时操作 makeLoginRequest() // 切换到主线程 withContext(Dispatchers.Main){ updateUI() // 更新UI } } }

挂起函数执行完毕后才能继续执行下面的代码。以上scope.lacunch{}协程体中的代码是顺序执行的! 点进withContent函数内部是加了suspend。

其中await() 和awaitAll()很好用

以前也有遇到情况就是几个接口要同时请求完毕才能结束,很丑陋,对吧?

var A = false var B = false var C = false ARequestNetWork(){ ... A = ture if( A && B && C ) {next()} } BRequestNetWork(){ ... B = ture if( A && B && C ) {next()} } CRequestNetWork(){ ... C = ture if( A && B && C ) {next()} }

可以改成这样,当然,saync中的函数的ARequestNetWork()也都要改造成适配协程的,你直接在启动一个子线程协程还是无法感知的。

coroutineScope { val deferredA = async { ARequestNetWork() } val deferredB = async { BRequestNetWork() } val deferredC = async { CRequestNetWork() } deferredA.await() deferredB.await() deferredC.await() next() }

这样写使用 awaitAll 更加简洁

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

GPT-5.2全面解析:AI“打工能力“大提升,程序员职场必备技能

OpenAI最新发布的GPT-5.2模型在30天内快速迭代,重点强化"打工能力"。通过实际测试,GPT-5.2在Excel处理、客服问题解决、超长文档处理等方面表现优异。GDPval测试显示其在74%的任务中达到或超过人类专家水平,且速度比人类快11倍。更…

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

vue-springboot基于Java医院药品管理系统的设计与实现_8z88u88g

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/9/15 11:18:26

深圳 CNC 加工哪家强?慧闻智造!精密零件加工的靠谱专家

在当今制造业高速发展的时代,CNC加工技术已成为推动产业升级的核心力量。作为精密制造的重要环节,CNC加工凭借其高精度、高效率的特性,广泛应用于航空航天、汽车制造、机器人等领域。在深圳这座创新之城,CNC加工行业更是蓬勃发展&…

作者头像 李华
网站建设 2026/9/15 7:28:53

CTF 解题核心思维 + 新手入门全攻略

CTF 解题核心思维 新手入门全攻略 很多人入门时把精力全花在工具操作上,却忽略了 CTF 的核心是思维逻辑 而非操作技巧。 本文跳出工具罗列 题型堆砌的传统思路,从解题核心思维链、新手三阶入门路径、实战案例拆解三大维度,帮你建立看到题目…

作者头像 李华
网站建设 2026/9/14 10:03:49

2026PCB产业高端化浪潮与慕尼黑上海电子展的连接枢纽

近年来,全球电子制造产业链加速重构,亚洲地区凭借在劳动力、资源、政策和产业聚集方面的突出优势,成为全球PCB(印刷电路板)产能转移的核心目的地。自2006年以来,中国大陆地区的PCB产量和产值一直居于世界前…

作者头像 李华