Kotlin 协程笔记
简介
协程是一种类似轻量级线程的东西。在官方示例中,甚至可以同时开启十万个协程进行工作,其轻量性可见一斑。
kotlinx.coroutines
是由 Jetbrains 开发的携程库,本身还改了很多协程的高级语言。也是本文的主角
Android 中使用
在app.build.gradle
中添加依赖
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0'
即可在项目中使用该库
基本用法
直接上代码,通过代码和注释能更直观的感受它的用法。(并不是我懒得组织文字)
通过GlobalScope.launch
开启协程。
/**
* 协程的基本用法
* @author binze 2020/6/12 14:41
*/
private fun coroutineTest0() {
GlobalScope.launch {
//后台耗时操作
while (true) {
Log.d(TAG, "onCreate: " + System.currentTimeMillis())
delay(1000)
}
}
GlobalScope.launch(Dispatchers.Default) {
//默认协程
}
GlobalScope.launch(Dispatchers.IO) {
//IO携程
}
GlobalScope.launch(Dispatchers.Main) {
//主协程
}
// GlobalScope.launch(newSingleThreadContext("MyThread")) {
// //新建线程协程
// //协程上下文包含一个协程调度器。可以将协程的执行局限在指定线程重。
// //尽量不要轻易使用 newSingleThreadContext("MyThread")
// }
}
GlobalScope.launch
会返回一个 Job
。通过它可以随时取消协程
/**
* 取消协程
* @author binze 2020/6/12 14:41
*/
private fun coroutineTest1() {
val job = GlobalScope.launch {
// some work
}
job.cancel()
}
利用协程和 async{}
与 await()
处理异步操作(如数据库读取、网络请求等)更为方便。
/**
* 异步请求
* @author binze 2020/6/12 14:44
*/
private fun coroutineTest2() {
GlobalScope.launch {
withTimeout(5000){ //5s超时
val data = async {
//模拟异步请求
delay(3000)
"return value" //将结果返回出去
}
Log.d(TAG, "coroutineTest2: " + data.await() /* 通过await()处理结果 */ )
}
}
}
未完
以上是协程的及其基本的用法。更多内容请参照 官方文档