SupervisorJob 、 Job 可以在开启一个协程时设置任务类型,默认开启一个协程方式为 launch(){...} 内部实现为Job(coroutineContext[Job]),也可以通过 launch(SupervisorJob(coroutineContext[Job])) { } , async(SupervisorJob(coroutineContext[Job])) { } 方式指定Job类型,它的...
fun testDelay() { GlobalScope.launch { println("before getName") var name = getUserName() println("after getName name:$name") } } suspend fun getUserName():String { return withContext() { //模拟网络获取 Thread.sleep(2000) "fish" } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11....
withContext发出错误:然⽽,⻓时间运⾏的消耗 CPU 的代码也许需要在 Dispatchers.Default 上下⽂中执⾏,并且更新 UI 的 代码也许需要在 Dispatchers.Main 中执⾏。通常,withContext ⽤于在 Kotlin 协程中改变代码的上下 ⽂,但是 flow {...} 构建器中的代码必须遵循上下⽂保存属性,并且不允许从其他上...
suspend:申明这是个可挂起的函数,里面可以用协程的一下方法(launch()、async()、withContext()等)。 如果切换线程中的代码很多,想把(withContext(){...})的代码抽出来。于是写成这样 代码语言:javascript 代码运行次数:0 运行 AI代码解释 fun getToken(): String { return withContext(Dispatchers.Default) { ...
协程也自带一些挂起函数协程的挂起函数有许多,比如delay,join,await,withContext,yield,withTimeout等等...
withContext(Dispatchers.Main) { // 现在这里就是Main线程了 可以在此进行UI操作了 } } // 下面直接看一个例子: 从网络中获取数据 并更新UI // 该例子不会阻塞主线程 mScope.launch(Dispatchers.IO) { // 执行getUserInfo方法时会将线程切至IO去执行 ...
withContext会使用新指定的上下文的dispatcher,将block的执行转移到指定的线程中。 它会返回结果, 可以和当前协程的父协程存在交互关系, 主要作用为了来回切换调度器。 coroutineScope{ launch(Dispatchers.Main) {// 在 UI 线程开始valimage=withContext(Dispatchers.IO) {// 切换到 IO 线程,并在执行完成后切回 UI...
更好的错误处理:Kotlin Flow依赖于 Kotlin 协程的异常处理机制,使得错误处理更加直观。RxJava 中则需要使用 onErrorReturn、onErrorResumeNext 等操作符来处理错误,语法相对复杂。 轻量级和性能:Kotlin Flow相对 RxJava 更轻量,因为它不需要包含 RxJava 的所...
suspendfungetImage(imageId:Int)= withContext(Dispatchers.IO) {} 使用launch、async 等方法创建的协程,在执行到某个 suspend 方法时会从正在执行它的线程上脱离。互相脱离后的线程和协程将会分别执行不同的任务: 线程:线程执行到了 suspend 方法,就暂时不再执行剩余协程代码,跳出协程的代码块。如果它是一个后台线...
一. withContext 与launch、async、runBlocking 类似 withContext 也属于 Coroutine builders。不过与他们不同的是,其他几个都是创建一个新的协程,而 withContext 不会创建新的协程。withContext 允许更改协程的执行线程,withContext 在使用时需要传递一个 CoroutineContext 。