1、协程是什么?
- 协程基于线程,它是轻量级线程。
- 协程让异步逻辑同步化,杜绝回调地狱。
- 协程最核心的点就是,函数或者一段能够被挂起,稍后在挂起的位置恢复。
2、在Android中协程用来解决什么?
- 处理耗时任务,这种任务常常会阻塞主线程。
- 保证主线程安全,即确保安全地从主线程调用任何suspend函数。
3、协程的挂起与恢复
常规函数基础操作包括:invoke(或call)和return,协程新增了suspend和resume:
- suspend--也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;
- resume--用于让已暂停的协程从其暂停处继续执行;
4、堆栈帧中的函数调用流程
图片.png5、挂起函数
- 使用suspend关键字修饰的函数叫作挂起函数;
- 挂起函数只能在协程体内或其他挂起函数内调用;
6、协程的阻塞与挂起
- 挂起:一般是主动的,由系统或程序发出,甚至于辅存中去。(不释放CPU,可能释放内存,放在外存);
- 阻塞:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号量(即有了资源)将他唤醒。(释放CPU,不释放内存);
7、调度器
所有协程必须在调度器中运行,即使它们在主线程上运行也是如此。
图片.png
8、协程结构化并发
使用结构化并发可以做到:
- 取消任务,当某项任务不再需要时取消它;
- 追踪任务,当任务正在执行追踪它;
- 发出错误信号,当协程失败时,发出错误信号表明有错误发生;
9、CoroutineScope
- 定义协程必须指定其CoroutineScope,它会跟踪所有协程,同样它可以取消由它所启动的所有协程。
- 常用的相关API有:
- GlobalScope,生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行。
- MainScope,在Activity中使用,可以在onDestory()中取消协程。
- viewModeScope,只能在ViewModel中使用,绑定ViewModel的生命周期。
- lifecyleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。
网友评论