美文网首页
协程中的取消和异常(驻留任务)

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

作者: 大虾啊啊啊 | 来源:发表于2020-12-04 08:46 被阅读0次

    在之前我们知道可以使用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.haomeiwen.com/subject/yzxmwktx.html