Kotlin中协程理解与实战(一)

  • 什么是协程
  • 在Android中协程用来解决什么问题
  • 协程是:
  • suspend -也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;
  • resume -用于让已暂停的协程从其暂停处继续执行
  • 挂起函数
  • 调度器
  • -Dispatchers.Main
  • -Dispatchers.IO
  • -Dispatchers.Default
  • 协程的两部分
  • Kotlind的协程实现分为两个层次
  • 任务泄漏
  • 结构化并发
  • CoroutinScope
  • 一.定义协程必须指定其CoroutineScope.它会跟踪所有协程,同样它还可以取消由它所启动的所有协程。
  • 二.常用的相关API有:
  • 协程的启动与取消


什么是协程

协程基于线程,它是轻量级线程

在Android中协程用来解决什么问题

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

协程是:

协程让异步逻辑同步化,杜绝回调地狱。
协程最核心的点就是,函数或者一段程序就能够被挂起,稍后再在挂起的位置恢复。
#协程的挂起与恢复
常规函数基础操作包括:invoke(或call)和return,协程新增了suspend和resume:

suspend -也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;

resume -用于让已暂停的协程从其暂停处继续执行

挂起函数

1.使用suspend关键字修饰的函数叫作挂起函数。
2.挂起函数只能在协程体内或其他挂起函数内调用

调度器

所有协程必须在调度器中运行,即使它们在主线程上运行也是如此

-Dispatchers.Main

Android 上的主线程, 用来处理UI交互和一些轻量级任务,
调用suspend函数
调用UI函数
更新LiveData

-Dispatchers.IO

非主线程,专为磁盘和网络IO进行优化
调用suspend函数
调用UI函数
更新LiveData

-Dispatchers.Default

非主线程,专为CPU密集型任务进行了优化
数组排序
JSON数据解析
处理差异判断

协程的两部分

Kotlind的协程实现分为两个层次

1.基础设施层,标准库的协程API,主要对协程提供了概念和语义上最基本的支持
2.业务框架层,协程的上层框架支持

任务泄漏

1.当某个协程任务丢失,无法追踪,会导致内存、CPU、磁盘等资源浪费,甚至发送一个无用的网络请求,这种情况称为任务泄漏。
2.为了能够避免协程泄漏,Kotlin引入了结构化并发机制。

结构化并发

使用结构化并发可以做到:
1.取消任务,当某项任务不再需要时取消它。
2.追踪任务,当任务正在执行时,追踪它。
3.发出错误信号,当协程失败时,发出错误信号表明有错误发生。

CoroutinScope

一.定义协程必须指定其CoroutineScope.它会跟踪所有协程,同样它还可以取消由它所启动的所有协程。

二.常用的相关API有:

1.GlobalScope,生命周期是process级别的,即使Activity或者Fragment已经被销毁,协程仍然在执行。
2.MainScope,在Activity中使用,可以在onDestroy()中取消协程。
3.viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期。
4.lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。

协程的启动与取消

1.启动协程:启动构建器,启动模式,作用域构建器,Job的生命周期
2.取消协程:协程的取消,CPU密集型任务取消,协程取消的副作用,超时任务