type
status
date
slug
summary
tags
category
icon
password
简单说明
CoroutineScope其实定义了协程的生命周期,比如在Activity中启动的协程,在Activity销毁的时候应该要取消.
而GlobalScope则是对应整个APP的生命周期,即使Activity已经销毁,CoroutineScope依然继续运行,可能导致协程泄漏,内存泄漏.
CoroutineScope
先来看一下它的定义:
可以看到,就是一个只带一个Field的简单接口.
CortoutineScope中封装了CoroutineContext,用于各种CortoutineScope的extention方法,比如
GlobalScope.launch
.可以使用诸如下面这样的代码去创建CoroutineScope:
再比如ViewModel提供的协程实现:
这里都会对CoroutineContext进行
+
操作,这里其实就是一个操作符重载.创建自定义的CoroutineScope
- 使用
CoroutineScope()
方法
这里的
CoroutineScope
是一个方法:需要注意的是,在组件生命周期结束时记得cancel操作
如果不使用GlobalScope,使用什么Scope?
如果不想自己自定义CoroutineScope,可以有下面这些选择:
- 使用MainScope
这里的MainScope其实也是一个简单的拓展实现:
注意到这里使用的是
Dispatchers.Main
,因此不要在里面做耗时操作.可以与withContext()
方法组合使用.- 使用AndroidX提供的ViewModelScope等.
- 作者:姜康
- 链接:https://jiangkang.tech/article/0cf00a15-a7e9-45b6-97ae-c82f76042a80
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。