协程
相当于Java new Thread后再runUiThread
// 必须先这样,这样是使用主线程,也可以GlobalScope.launch{},就是使用 EmptyCoroutineContext
GlobalScope.launch(Dispatchers.Main) {
// 异步处理,如果这里是XXX函数也行办法接,do1();
// 并且可以这样 suspend fun do1(){}定义,suspend 表示这个函数很费CPU,可以得到编译优化
withContext(Dispatchers.IO){
var tmp = URL("https://www.baidu.com").readText()
// 转回UI线程
withContext(Dispatchers.Main){
txt.text = tmp;
}
}
}
多个协程同时运行并且需要一起结束的时候:
import kotlinx.coroutines.*
fun main() {
// 自动等待所有线程结束
runBlocking{
launch{
delay(1000L)
println("thread1")
}
launch{
delay(1000L)
println("thread2")
}
// 相同功能的线程可以用
repeat(100_000) { // 启动大量的协程 10万个
launch{
print(".")
}
}
println("Main")
}
}
超时:
runBlocking {
launch {
withTimeoutOrNull(300){
for(i in 0..10){
delay(100)
println("time $i")
}
}
}
}
更详细参考:www.kotlincn.net
评论已关闭