coroutineScope是一个挂起函数,它创建一个新的协程作用域并在其中启动协程,而CoroutineScope是一个接口,通常与launch或async一起使用,用于创建并启动协程。 同样,coroutineScope和supervisorScope也都用于创建新的协程作用域,但它们对待子协程之间的关系和异常处理的方式不同。coroutineScope在一个子协程发生异常时会取消所有...
从类定义看,CoroutineScope和CoroutineContext非常类似,最终目的都是协程上下文,但正如Kotlin协程负责人Roman Elizarov在Coroutine Context and Scope中所说,二者的区别只在于使用目的的不同——作用域用于管理协程;而上下文只是一个记录协程运行环境的集合。他们的关系如下。 Roman Elizarov的文章说得可能不是很明晰,我认为...
定义协程必须指定其CoroutineScope,它会跟踪所有协程,同样它还可以跟踪取消它所启动的协程. 协程作用域: GlobalScope. 生命周期是process 级别的,即时Activity 或 fragment已经销毁,协程仍然在执行. MainScope. 在Activity 中使用,可以在onDestroy()中取消. viewModelScope. 只能在ViewModel 中使用,绑定ViewModel 的生命周...
1、CoroutineScope#actor 函数原型 2、代码示例 一、CoroutineScope#produce 构造生产者协程 通过CoroutineScope#produce 函数 , 可以快速构造一个 生产者协程 , 其返回值是 ReceiveChannel 实例对象 , 这样就可以在消费者协程中通过该 ReceiveChannel 实例获取并消费数据 ; 1、CoroutineS...
1、CoroutineScope#actor 函数原型 2、代码示例 一、CoroutineScope#produce 构造生产者协程 通过CoroutineScope#produce 函数 , 可以快速构造一个 生产者协程 , 其返回值是 ReceiveChannel 实例对象 , 这样就可以在消费者协程中通过该 ReceiveChannel 实例获取并消费数据 ; ...
val scope = CoroutineScope(Job() + Dispatchers.Main) val job = scope.launch { // 新的协程会将 CoroutineScope 作为父级 val result = async { // 通过 launch 创建的新协程会将当前协程作为父级 }.await() } 层级的根通常是 CoroutineScope。图形化该层级后如下图所示: ...
public val coroutineContext: CoroutineContext } CoroutineScope中只包含一个待实现的变量CoroutineContext,至于CoroutineContext之前的文章已经分析了它的内部结构,这里就不再累赘了。 通过它的结构,我们可以认为它是提供CoroutineContext的容器,保证CoroutineContext能在整个协程运行中传递下去,约束CoroutineContext的作用边界。
val scope=CoroutineScope(Job()+Dispatchers.Main)val job=scope.launch{// 新的协程会将 CoroutineScope 作为父级val result=async{// 通过 launch 创建的新协程会将当前协程作为父级}.await()} 层级的根通常是 CoroutineScope。图形化该层级后如下图所示: ...
上一小节,学习了GlobalScope.launch、runBlocking、launch、coroutineScope这几种作用域构建器,都可以用来创建协程作用域。GlobalScope.launch和runBlocking函数是可以在任意地方调用,coroutineScope函数可以在协程作用域或挂起函数中调用,而launch函数只能在协程作用域中调用。
kotlin学习-Coroutines(协程) 协程(又名纤程),轻量级线程(建立在线程基础上,属于用户态调用),非阻塞式编程(像同步编写一样),在用户态内进行任务调度,避免与内核态过多交互问题,提高程序快速响应。协程使用挂起当前上下文替代阻塞,被挂起后的协程可以去运行其它active task,即协程可以被复用,相比于线程,减少了线程资源...