协程是什么:
协程是Kotlin中有特色的一项技术,大部分编程语言没有协程这个概念。协程可简单理解成轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的。一个线程内可创建多个协程,协程可在编程语言层面实现不同协程之间的切换,从而在单线程模式下模拟多线程的效果。其中的原理是协程可在某个地方挂起,并且可以重新在挂起处继续运行。而代码执行时的挂起与恢复完全由编程语言控制,与操作系统无关。
协程特点:
轻量
可以在单个线程上运行多个协程,因为协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作
内存泄漏更少
用的结构化并发机制能帮助追踪运行在协程中的任务,比如在不需要协程的时候取消任务,协程运行时追踪任务,协程执行失败时传播错误信号
内置取消支持
取消操作会自动在运行中的整个协程层次结构内传播
jetpack集成
许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域,可用于结构化并发。
协程使用:
提示:Kotlin没有将协程纳入标准库的API中,而是以依赖库的形式提供。 使用前需在app/build.gradle文件中添加如下依赖库
例如:
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"
//用于android
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
代码实例
class LoginViewModel(
private val loginRepository: LoginRepository
): ViewModel() {
fun login(username: String, token: String) {
//新建一个协程,从UI线程移出
相关阅读
发表评论