美文网首页
认识协程

认识协程

作者: 因为我的心 | 来源:发表于2021-09-01 11:50 被阅读0次

1、协程是什么?

  • 协程基于线程,它是轻量级线程。
  • 协程让异步逻辑同步化,杜绝回调地狱。
  • 协程最核心的点就是,函数或者一段能够被挂起,稍后在挂起的位置恢复

2、在Android中协程用来解决什么?

  • 处理耗时任务,这种任务常常会阻塞主线程。
  • 保证主线程安全,即确保安全地从主线程调用任何suspend函数。

3、协程的挂起与恢复

常规函数基础操作包括:invoke(或call)和return,协程新增了suspend和resume:

  • suspend--也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;
  • resume--用于让已暂停的协程从其暂停处继续执行;

4、堆栈帧中的函数调用流程

图片.png

5、挂起函数

  • 使用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的生命周期。

相关文章

网友评论

      本文标题:认识协程

      本文链接:https://www.haomeiwen.com/subject/hksxwltx.html