kotlin协程简介

326 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

技术是永无止境的,需要不断地学习总结。

什么是协程?

协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。

1. GlobalScope 的使用(不推荐),绑定的为应用的整个生命周期,GlobalScope是生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行。所以需要绑定生命周期。

添加依赖如下:

implementation"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9"

implementation"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9"

kotlin 中 GlobalScope 类提供了几个创建协程的构造函数:

launch: 创建协程

async : 创建带返回值的协程,返回的是 Deferred 类

withContext:不创建新的协程,指定协程上运行代码块

runBlocking:不是 GlobalScope 的 API,可以独立使用,区别是 runBlocking 里面的 delay 会阻塞线程,而 launch 创建的不会

image.png

2、lifecycleScope (推荐使用) lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期

**lifecycleScope会绑定调用者的生命周期,因此通常情况下不需要手动去停止
**

添加依赖如下:

implementation'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'//lifecycleScope

implementation'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'//viewModelScope

image.png

1.在不使用回调的前提下完成来线程的切换,代码看上亲也是干净整洁很多。

2.因为线程没有上下文,不能控制线程执行完成后应该回到哪里,但是协程完全帮我们实现自动化,执行完毕自动回到上下文线程中,一般情况下是主线程,可以通过设置来决定要回到哪个线程中。

3.协程可以通过suspend关键字来标志耗时操作,通过编译器来帮助我们避免一些性能上的问题。