Kotlin中协程上篇

协程是什么

协程是Kotlin提供的一套线程封装的API

Kotlin中,协程一个典型的使用场景就是线程控制

协程好在哪

在Kotlin中,当函数的最后一个参数是lambda表达式时,可以将lambda写在括号外,这就是闭包原则

在项目中配置对Kotlin协程的支持

项目根目录下的 build.gradle :

buildscript {
    
    ext.kotlin_coroutines = '1.3.1'
    
}

Module下的build.gradle:

dependencies {
                                        
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines"
  
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines"
    
}

协程基本使用:

// 方法一,使用 runBlocking 顶层函数
runBlocking {
    getImage(imageId)
}
​
// 方法二,使用 GlobalScope 单例对象
// 可以直接调用 launch 开启协程
GlobalScope.launch {
    getImage(imageId)
}
​
// 方法三,自行通过 CoroutineContext 创建一个 CoroutineScope 对象
// 需要一个类型为 CoroutineContext 的参数
val coroutineScope = CoroutineScope(context)
coroutineScope.launch {
    getImage(imageId)
}

方法一:是线程阻塞的,不推荐使用

方法二:生命周期会和 app 一致,且不能取消,不推荐使用

方法三:推荐使用

使用Dispatchers.IO 切换到IO线程

使用Dispatchers.Main 切换到主线程

使用协程

coroutineScope.launch(Dispatchers.IO) {
    ...
}

launch函数含义是:创建一个新的协程,并在指定线程上运行

coroutineScope.launch(Dispachers.Main) {
    ...
    withContext(Dispachers.IO) {
        ...
    }
    ...
    withContext(Dispachers.IO) {
        ...
    }
    ...
}
发布了272 篇原创文章 · 获赞 68 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/u014005316/article/details/104425606