| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> kotlin协程篇-2 -> 正文阅读 |
|
[移动开发]kotlin协程篇-2 |
前文介绍了kotlin相关的一个基础知识 纠错在前篇中我们说kotlin的启动都是基于上下文启动的,这话其实不对 ,协程的启动时基于CoroutineScope,就是协程域 协程启动模式 CoroutineStart枚举类共计4个参数 分别是:
协程调度器 Dispatchers单利
为了配合下面的知识我们先拿出每个调度器的 isDispatchNeeded 默认为true 这里我们先不看这个参数的含义,后面会说 这里我们简单说下 override fun isDispatchNeeded(context: CoroutineContext): Boolean = false DEFAULT根据上下文立即调度协程执行。 如果调度器的 CoroutineDispatcher.isDispatchNeeded=true 那么协程构建器会继续运行 而协程代码将稍后运行 我们来看看参数运行情况:
不难发现我们先运行了构建器所在位置 而协程代码将被延后了 如果我们使用了
那么协程将被先运行结果如下
对于DEFAULT 启动模式后面还有一句话就是:能被随时取消 当然这肯定基于 我们的协程延后才能实现 如果协程提前运行了 肯定无法取消 也就是我们的携程构建器先运行的话 协程将直接被取消 这里就不做异常的说明
惰性的,启动由我们指定start开始 才会执行 我们来看下exp:
输出依然:
我们改变下代码:
也就是将isDisp…=false的情况 那么和DEFAULT就差不多了 不过依然要等start后会立刻切回到协程执行
这个不做过多解释 和DEFAULT 差不多 但是唯一的差别就是 启动协程后到第一个挂起点 之间的携程代码 是不可被cancle的
这个就和isDispaterNeed=false 一样 先执行协程 直到第一个挂起点
下面我们看下调度器 不难从上面的代码中我们发现 如果未指定调度器 以及我们的各种启动模式均运行在主线程
运行在Main线程中
注意 并不是挂起生成了不同的线程 而是调度器去生成的
不同的是IO调度器更适合长时间运行任务 可以看到线程的复用机制较低 而default 偏高
我们发现其第一次挂起前运行在父协程所在线程 之后运行在默认线程池
最后用图来表示本文的结束: |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 23:27:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |