阅读 84

协程中的取消和异常(驻留任务)

在之前我们知道可以使用jetpack中的lifecycleScope ,viewModelScope来将我们的作用域和生命周期绑定,这样以来,生命周期销毁的时候,取消我们的作用域。但是有时候,我们需要做一些缓存操作,即使Acivity被退出了,但是只要进程还在,我们希望做一些操作,不希望协程的作用域被取消。我们自定义CoroutineScope,不推荐使用(GloabalScope ,官方的意思是这样会导致我们的作用域不可控制),我们在Application定义我们的CoroutineScope,因为进程结束的时候,这样我们的作用域也会被结束

class MyApplication : Application() {
  // 不需要取消这个作用域,因为它会随着进程结束而结束
   val applicationScope = CoroutineScope(SupervisorJob() + otherConfig)
}

接着我们可以通过该作用域启动我们的协程执行缓存的一些任务

 suspend fun doWork() {
    withContext(ioDispatcher) {
      doSomeOtherWork()
      externalScope.launch {
        //如果这里会抛出异常,那么要将其包裹进 try/catch 中;
        //或者依赖 externalScope 的 CoroutineScope 中的 CoroutineExceptionHandler 
        veryImportantOperation()
      }.join()
    }
  }

以上我们说的驻留任务前提是APP进程还在,如果APP进程结束了,我们希望在某个时间点做某些操作,我们可以使用jetpack中的WorkManager.

作者:大熊啊啊啊

原文链接:https://www.jianshu.com/p/b792a20e1862

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐