kotlin的定义
对我来说就是跟线程一样的东西,是个线程框架,让开发者更好的处理并发,以及解决回调问题
协程的使用
在app的build.gradle中添加依赖
kotlin {
experimental {
coroutines 'enable'
}
}
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0'
}
线程切换
创建协程,并指定运行的线程
GlobalScope.launch (Dispatchers.IO){//切换到IO线程执行
saveToDatabase(data)
}
GlobalScope.launch (Dispatchers.Main){//切换到Main线程执行
updateViews(data)
}
结合使用
GlobalScope.launch (Dispatchers.Main){
val token = api.getToken()//网络请求:后台线程
val user = api.getUser(token)//网络请求:后台线程
nameTv.text = user.name //更新UI:主线程
}
当然,还有并发的网络请求
GlobalScope.launch (Dispatchers.Main){
val avaTar = async { api.getAvatar(user) }//获取用户头像
val logo = async { api.getCompanyLogo(user) }//获取公司logo
val merged = suspendingMerged(avaTar,logo)//合并
show(merged)//展示
}
也可以通过withContext函数实现多线程的协作
GlobalScope.launch (Dispatchers.Main){
withContext(Dispatchers.IO){
……
}
……
withContext(Dispatchers.IO){
……
}
……
}
withContext函数会自动切回调用它的线程,可以把函数放进方法里面,使代码看起来更加简洁