一手遮天 Android - kotlin 协程: 协程基础(CoroutineScope, 为 CoroutineScope 扩展方法, runBlocking, launch, async, await, suspend, withContext, 设置/获取 CoroutineScope 的名称) 示例如下: /kotlin/coroutine/Demo1.kt /** * coroutine - 协程 * 本利用于演示协程基础,包括 CoroutineScope, 为 CoroutineSco...
让我们使用 async-await 并行运行这两个任务,然后使用 withcontext 来看看两者之间的区别。 // kotlin function using asyncfun startLongRunningTaskInParallel(){viewModelScope.launch{val resultOneDeferred = async { TaskOne() }val resultTwoDeferred = async { TaskTwo() }val combinedResult = resultOneDeferr...
runBlocking是一个函数,它可以创建一个新的CoroutineScope并在当前线程中运行。runBlocking通常用于测试或在main函数中使用协程。 withContext withContext是一个函数,它允许您在指定的调度器上运行协程。withContext通常用于在不同的线程或调度器上执行异步操作,例如在后台线程中执行数据库操作。 除了这些常见的CoroutineScope,...
scope.launch {//处理具体逻辑} job.cancel() 先创建一个Jon对象,传入CoroutineScope()函数中,它会返回一个CoroutineScope对象,有了这个对象,就可以调用它的launch函数来创建一个协程了。 现在所以调用CoroutineScope的launch函数所创建的协程,都会被关联在Job对象的作用域下面,这样只需调用一次cancel()方法,就可以将...
withContextt这个函数主要可以切换到指定的线程,并在闭包内的逻辑执行结束之后,自动把线程切回去继续执行: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 coroutineScope.launch(Dispatchers.Main){// 在 UI 线程开始val image=withContext(Dispatchers.IO){// 切换到 IO 线程,并在执行完成后切回 UI 线程getI...
Job 表示在一个 CoroutineScope 内开启的一个协程任务, Job 内可以开启多个子Job , 通常每开启一个协程任务后会返回一个Job对象,可以通过执行 Job.cancel() 方法取消协程运行 viewLifecycleOwner.lifecycleScope.launch { valjob = launch { // xxxx
也就是说,mainScope.launch()得到的协程默认都是在主线程中。也可以直接创建CoroutineScope指定对应的调度器。 withContext withContext():用给定的协程上下文调用指定的暂停块,暂停直到完成,然后返回结果。也就是说,可以用来切换线程,并返回执行后的结果。 常用的有 Dispatchers.Main:工作在主线程中 Dispatchers....
mainScope.launch { // 协程作用域, 在该代码块中执行协程任务 // 是协程任务调度器, 用于执行耗时操作 withContext(){ Log.i("MainActivity", "withContext : 协程中执行耗时操作") } // 挂起函数, 可以不使用协程调度器 delay(20000) // 主线程更新 UI ...
public suspend fun <T> withContext( context: CoroutineContext, block: suspend CoroutineScope.() -> T ): T { //... } 复制代码 呀,这一看withContext这个东西好像很符合我们的需求嘛,我们可以先使用launch(Dispatchers.Main)启动协程,然后再通过withContext(Dispatchers.IO)调度到IO线程上去做网络请求,把...
✅我们换成coroutineScope试试呢: funmain(){//开启一个协程GlobalScope.launch{coroutineScope{//这也是一个官方定义好的挂起函数,能起到延时的作用delay(1000)println("delay结束")}}println("我没有被阻塞了")} 结果: 我没有被阻塞了 ⛔GlobalScope是一个顶级协程,意思就是说它的生命周期是跟着整个进程的...