1、协程是什么
协程基于线程,它是轻量级的线程
协程让异步逻辑同步化,杜绝回调地狱
协程最核心的点就是,函数或者一段程序能够被挂起,稍后再在挂起的位置回复
2、协程用来解决什么问题
处理耗时任务,这种任务常常会阻塞主线程
保证主线程安全,即确保安全地从主线程调用任何suspend函数
3、协程的挂起和恢复
常规函数基础操作包括:invoke(或call)和return,协程新增了suspend和resume:
suspend --- 也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量
resume---用于让已暂停的协程从起暂停处继续执行
4、挂起函数
使用suspend关键字修饰的函数叫做挂起函数
挂起函数只能在协程体内或其他挂起函数内调用
5、协程实现分为两个层次:
基础设施层,标准库的协程API,主要对协程提供了概念和语义上最基本的支持
业务框架层,协程的上层框架支持
6、所有协程必须在调度器中运行,即使它们在主线程上运行也是如此
7、任务泄露
当某个协程任务丢失,无法追踪,会导致内容、CPU、磁盘等资源浪费,甚至发送一个无用的网络请求,这种情况称为任务泄露
为了能够避免协程泄露,Kotlin引入了结构化并发机制
8、结构化并发
使用结构化并发可以做到:
取消任务,当某项任务不再需要时取消它
追踪任务,当任务正在执行时,追踪它
发出错误信号,当协程失败时,发出错误信号表明有错误发生
9、CoroutineScope
定义协程必须指定其CoroutineScope,它会跟踪所有协程,同样它还可以取消由他所启动的所有协程
常用的相关API 有:
GlobalScope,生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行
MainScope,在Activity中使用,可以在onDestroy()中取消协程
viewModuleScope,只能在ViewModel中使用,绑定ViewModel的生命周期
lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期