注册

kotlin协程简介

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


什么是协程?


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


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关键字来标志耗时操作,通过编译器来帮助我们避免一些性能上的问题。


作者:张嘉美
链接:https://juejin.cn/post/7087175117976895502
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册