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 创建的不会
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
1.在不使用回调的前提下完成来线程的切换,代码看上亲也是干净整洁很多。
2.因为线程没有上下文,不能控制线程执行完成后应该回到哪里,但是协程完全帮我们实现自动化,执行完毕自动回到上下文线程中,一般情况下是主线程,可以通过设置来决定要回到哪个线程中。
3.协程可以通过suspend关键字来标志耗时操作,通过编译器来帮助我们避免一些性能上的问题。
作者:张嘉美
链接:https://juejin.cn/post/7087175117976895502
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。