Kotlin协程
Kotlin协程是目前很流行的一款用于异步任务处理的库,都知道它处理异步任务特别好用,但是很少人去探究它背后的原理。还有一点,由于它是用于处理异步任务的,很多人将协程与线程做对比,也有一些人将协程与Rxjava做对比。这篇文章将从最简单的用法开始,层层递进的讲解协成知识点。
如何使用使用协程,以及协程中的一些重要概念
首先先介绍一下怎么开启一个协程,在Android开发中,如果是在Activity或者Fragment中,那么可以通过以下这种方式开启一个协程。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch{
//这里面就是协程
}
}
}
然而我们肯定不止在Activity或者Fragment中去使用协程,那么其他地方怎么去开启协程呢?要搞清楚这一点,就要知道lifecycleScope是什么,lifecycleScope是一个实现了CoroutineScope类的一个实例。CoroutineScope翻译过来就是协程作用域,到这里我们就清楚了,要开启一个协程,首先就要有一个协程作用域。通过协程作用域的实例去启动一个协程。 在Android开发中呢,很多时候不需要我们自己创建协程作用域,因为android中有很多拓展属性。比方上面说的Activity和Fragment中有lifecycleScope,ViewModel中有viewModelScope,可以直接使用这些拓展属性去开启一个协程。那其他地方怎么去创建一个协程作用域呢?首先就是可以通过MainScope()去创建一个主线程下协程作用域,还有可以通过CoroutineScope(Dispatchers.IO)去创建一个IO线程下的协程作用域。如下
// demo1
val scope = MainScope()
scope.launch{
Log.d(TAG,Thread.currentThread().name) // 打印main
}
// demo2
val scope2 = CoroutineScope(Dispatchers.IO)
scope2.launch {
Log.d(TAG,Thread.currentThread().name) // 打印DefaultDispatcher-worker-1
}
上面的这段代码还有一个地方没有讲清楚CoroutineScope(Dispatchers.IO)里面的参数是什么?其实CoroutineScope(context: CoroutineContext)接收的是一个CoroutineContext实例,CoroutineContext翻译过来就是协程的上下文的意思。
协程上下文是各种不同元素的集合。其中元素包含了了一个CoroutineDispatcher,即协程调度器。它确定了相关的协程在哪个线程或哪些线程上执行。协程调度器可以将协程限制在一个特定的线程执行,或将它分派到一个线程池,亦或是让它不受限地运行。 比如上述的例子通过demo1里面的MainScope()协程作用域开启的协程,协程是运行在主线程里面的。demo2的协程就是运行在io线程里面的。即使是在通过MainScope()开启的协程,依旧可以指定线程。啥意思,看如下这个例子,launch里面多了Dispatchers.IO这个参数
val scope = MainScope()
val job = scope.launch(Dispatchers.IO){
Log.d(TAG,Thread.currentThread().name) //打印 DefaultDispatcher-worker-1
}
这里面打印的就不是主线程了,而是IO线程了。看到这里明白了吗?协程调度器才是真正决定协程在哪个线程运行的关键,而协程作用域只是给这个协程提供了一个生命周期的管理而已。它并不能真正决定协程运行在哪一个线程。那么demo1打印main的现象怎么解释?因为launch函数如果不传协程的上下文,它就默认是协程作用域里面的上下文,而MainScope()默认的上下文里面的调度器就是Dispatchers.Main.
总结对比一下上面讲述的几个概念:
- 协程作用域:主要负责管理协程的生命周期。
- 协程上下文:由各种元素组成,其中一个元素是协程调度器。
- 协程调度器:定了相关的协程在哪个线程或哪些线程上执行。
如何进阶学习kotlin协成
《史上最详Android版kotlin协程入门进阶实战指南》
第一章 Kotlin协程的基础介绍
- 1.1 协程是什么
- 1.2 什么是Job 、Deferred 、协程作用域
- 1.3 Kotlin协程的基础用法

第二章 kotlin协程的关键知识点初步讲解
- 2.1 协程调度器
- 2.2 协程上下文
- 2.3 协程启动模式
- 2.4 协程作用域
- 2.5 挂起函数

第三章 kotlin协程的异常处理
- 3.1 协程异常的产生流程
- 3.2 协程的异常处理

第四章 kotlin协程在Android中的基础应用
- 4.1 Android使用kotlin协程
- 4.2 在Activity与Framgent中使用协程
- 4.3 ViewModel中使用协程
- 4.4 其他环境下使用协程

第五章 kotlin协程的网络请求封装
- 5.1 协程的常用环境
- 5.2 协程在网络请求下的封装及使用
- 5.3 高阶函数方式
- 5.4 多状态函数返回值方式
- 5.5 直接返回值的方式

第六章 深入kotlin协程原理(一)
- 6.1 suspend的花花肠子
- 6.2 藏在身后的-Continuation
- 6.3 村里的希望-SuspendLambda

第七章 深入kotlin协程原理(二)
- 7.1 协程的那些小秘密
- 7.2 协程的创建过程
- 7.3 协程的挂起与恢复
- 7.4 协程的执行与状态机

第八章 Kotlin Jetpack 实战
- 8.1 从一个膜拜大神的 Demo 开始
- 8.2 Kotlin 写 Gradle 脚本是一种什么体验?
- 8.3 Kotlin 编程的三重境界
- 8.4 Kotlin 高阶函数
- 8.5 Kotlin 泛型
- 8.6 Kotlin 扩展
- 8.7 Kotlin 委托
- 8.8 协程“不为人知”的调试技巧
- 8.9 图解协程原理

第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求
- 9.1 项目配置
- 9.2 实现思路
- 9.3 协程实现
- 9.4 协程 + ViewModel + LiveData实现
- 9.5 后续优化
- 9.6 异常处理

朋友们如果需要这份完整版的《史上最详Android版kotlin协程入门进阶实战指南》,微信扫描下方csdn官方认证二维码免费领取【保证100%免费】。


本文详细介绍了Kotlin协程在Android开发中的应用,从基础概念到进阶原理,涵盖协程的启动、上下文、调度器、异常处理、网络请求封装等方面,并提供了实战案例。通过学习,读者将能够熟练掌握Kotlin协程的使用和原理。
1432

被折叠的 条评论
为什么被折叠?



