1 suspend函数 挂起的不是线程,也不是函数 !而是挂起的协程块,将协程块切到另一个线程
2 协程块就是
launch(Dispatchers.Main){
\\ todo 在这里!!
} 里的代码复制代码
1 ************协程的挂起本质就是切线程 *************
2 基于线程而实现的一套更上层的工具API
3 只不过挂起函数执行完毕后,协程会稍后自动从新切回它原先的所在线程复制代码
先别看图,看懂下面的描述,再对应图里的代码bash
1 声明的suspend从当前线程(main)开始挂起,脱离当前执行它的的线程,协程块suspend里的代码就没有在当前线程跑了异步
2 当前线程( main )遇到suspend函数时 就等于跳过当前代码(suspend里的逻辑代码,suspend被挂起),而挂起的逻辑代码在它声明的指定线程里(IO)等待执行..。 async
3 执行完IO后,函数又会帮咱们自动切回到main线程,能够设置特殊的Dispathcers(调度器) ,不切回去。ide
4 Dispathcers 指定协程执行的线程 ,还能在suspned挂起函数执行完以后,自动再切回去函数
注意的地方是 ,挂起后 不是这个协程块停下来了!像异步分发工具
并非声明它了 ,函数就立马挂起了,真正起决定的是里面声明相似 withContext(Dispathcers.IO)、async() 等函数里的底部代码post
async() 也是建立协程的函数ui
第一节笔记 juejin.im/post/5d8393…spa
视频课www.bilibili.com/video/av682… @扔物线 期待下一节协程讲课
线程