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等.
    浅谈Android中的BroadcastKotlin中的协程
    Loading...