Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )相关的知识,希望对你有一定的参考价值。
文章目录
一、Kotlin 协程分层架构
Kotlin 协程分层架构 : 在 Kotlin 中 , 协程分为两层 ;
- 基础设施层 : Kotlin 提供了 协程 标准库 Api , 为协程提供 概念 , 语义 支持 , 是 协程 实现的基础 ; Kotlin 协程的底层支持 ; 基础 Api ;
- 业务框架层 : Kotlin 协程的 上层框架 , 使用方便 ; 在之前博客中使用的 GlobalScope 类 , launch 函数 , delay 挂起函数 等都属于 业务框架层 , 都是 Kotlin 协程 的上层实现 ; 在 基础 Api 的基础上 进行了一层封装 , 形成了方便开发者使用的框架 ;
基础设施层 : 基础设施层 的 协程基础 Api 定义在 kotlin.coroutines.*
包下 ;
import kotlin.coroutines.*
业务框架层 : 如果调用 常见的协程 Api , 调用的是 业务框架层 的 Api , 如 GlobalScope , launch , Dispatchers 等 , 都定义在 kotlinx.coroutines.*
包下 ;
import kotlinx.coroutines.*
可以类比的理解为
- 基础设施层 是 android 和 Java 的基础 Api ,
- 业务框架层 是 对 基础 Api 进行了一层封装的框架 , 如 RxJava , Retrofit , Glide 等 , 目的是为了方便开发 ;
二、使用 Kotlin 协程基础设施层标准库 Api 实现协程
协程 需要使用 协程体定义 , 协程体格式如下 :
suspend
// 协程体内容
协程体定义完之后 , 调用协程体的 createCoroutine 函数 , 传入 Continuation 实例对象 , 一般传入一个 对象表达式 ( Java 中的匿名内部类 ) 作为参数 ;
对象表达式 object : Continuation<Int>
中 Continuation 后的 <Int> 泛型 表示的是协程体的返回值类型 ;
协程执行完毕后, 将协程执行结果返回 , 此时会回调 override fun resumeWith(result: Result<Int>)
函数 ;
// 创建协程
// 注意只是创建协程, 创建后还需要调用 resume 启动协程
val continuation = suspend //协程体
// 协程体返回值为 int 值 0
0
.createCoroutine(object : Continuation<Int>
// Continuation 后的 Int 泛型表示 协程体返回值为 Int 类型
// 协程上下文设置为 空的协程上下文 EmptyCoroutineContext
override val context: CoroutineContext = EmptyCoroutineContext
// 协程执行完毕后, 将协程执行结果返回
// 该函数是一个回调函数
override fun resumeWith(result: Result<Int>)
Log.i("MainActivity", "协程体返回值为 $result")
)
上面只是创建协程 , 如果要执行协程 , 还需要调用协程的 resume
方法 ;
// 启动协程
continuation.resume(Unit)
完整代码如下 :
package kim.hsl.coroutine
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import kotlin.coroutines.*
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 创建协程
// 注意只是创建协程, 创建后还需要调用 resume 启动协程
val continuation = suspend //协程体
// 协程体返回值为 int 值 0
0
.createCoroutine(object : Continuation<Int>
// Continuation 后的 Int 泛型表示 协程体返回值为 Int 类型
// 协程上下文设置为 空的协程上下文 EmptyCoroutineContext
override val context: CoroutineContext = EmptyCoroutineContext
// 协程执行完毕后, 将协程执行结果返回
// 该函数是一个回调函数
override fun resumeWith(result: Result<Int>)
Log.i("MainActivity", "协程体返回值为 $result")
)
// 启动协程
continuation.resume(Unit)
基础设施层 : 上述 基础设施层 的 协程基础 Api 定义在 kotlin.coroutines.*
包下 ;
import kotlin.coroutines.*
业务框架层 : 如果调用 常见的协程 Api , 调用的是 业务框架层 的 Api , 如 GlobalScope , launch , Dispatchers 等 , 都定义在 kotlinx.coroutines.*
包下 ;
import kotlinx.coroutines.*
以上是关于Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程底层实现 ④ ( 结构化并发 | viewModelScope 作用域示例 )
Kotlin 协程协程底层实现 ④ ( 结构化并发 | viewModelScope 作用域示例 )
Kotlin 协程协程底层实现 ② ( 协程调度器 | 协程任务泄漏 | 结构化并发 )
Kotlin 协程协程底层实现 ② ( 协程调度器 | 协程任务泄漏 | 结构化并发 )
Kotlin 协程协程底层实现 ③ ( 结构化并发 | MainScope 作用域 | 取消协程作用域 | Activity 实现 CoroutineScope 协程作用域接口 )
Kotlin 协程协程底层实现 ③ ( 结构化并发 | MainScope 作用域 | 取消协程作用域 | Activity 实现 CoroutineScope 协程作用域接口 )