Kotlin 协程挂起函数 suspend 关键字
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 协程挂起函数 suspend 关键字相关的知识,希望对你有一定的参考价值。
suspend 挂起的是协程
协程是什么
就是launch
or
async
代码块中的东西
使用了suspend 后 就会切换出来一个协程去执行操作。而不是在当前的线程当中
suspend 是暂时切走。等执行完毕后再切回来。
launch(Dispatchers.Main)
//切到子线程进行操作
val repoResponse: Response<FeedBackLists>
withContext(Dispatchers.IO)
repoResponse = RetrofitClient
.instance
.getApi()
//suspend 挂起的方法必须在携程体内进行调用
.getFeedBack(1, 1)
//还是在主线程
binding.tvText.text = "repoResponse :$repoResponse.data!!.data[0].content"
挂起可以理解为开个线程。或者是切个线程,只不过挂起这个函数执行完毕后,协程会自动切回到原先的那个线程。
所以所谓挂起。就是线程切换。这个切回来的操作
在线程当中叫做resume
但是suspend并没有切换线程。
首先自定义一个挂起函数
然后主线程调用
你会发现还是运行在主线程。
withContext可以切换到子线程
所以说suspend切换线程并不是发生在你外部这个挂起函数被调用的时候。而是withContext被调用的时候
withContext也没有直接切换线程。还在里面
在语法上面suspend关键字有什么用?
提醒,函数的创建者=》使用者的提醒
提醒这个是一个被自动放在后台运行的耗时函数。
这个提醒可以让主线程不卡
什么时候使用suspend关键字
耗时操作如 io、文件读写,网络交互,图片的模糊或者美化处理。
等待情况 如 deley(10000)耗时操作
以上是关于Kotlin 协程挂起函数 suspend 关键字的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程的挂起和恢复 ② ( 协程挂起 和 线程阻塞 对比 )
Kotlin 协程协程的挂起和恢复 ① ( 协程的挂起和恢复概念 | 协程的 suspend 挂起函数 )
Kotlin 协程协程的挂起和恢复 ① ( 协程的挂起和恢复概念 | 协程的 suspend 挂起函数 )
kotlin协程硬核解读(3. suspend挂起函数&挂起和恢复的实现原理)