相当于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

标签: none

评论已关闭