Как завершить работу при отмене корутина? - PullRequest
0 голосов
/ 19 октября 2019

Существует ли механизм для завершения чего-либо (например, для закрытия некоторых ресурсов и т. Д.) При отмене задания сопрограммы?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Позвольте мне привести вам пример, скажем, ваш Coroutine ограничен с viewModel, тогда, когда viewModel очищен, вы получите обратный вызов onCleared для viewModel ипоскольку ваши собеседники ограничены этим viewModel, он сразу же отменяется, и вы получите обратный вызов onCleared , и вы можете закрыть некоторые ресурсы на нем.

0 голосов
/ 19 октября 2019

Для тех, кто пытается решить подобную проблему:

val job = scope.launch(Dispatchers.IO){
     try {
         //do the job
     } catch (cancelException: CancellationException) {}
     finally {
        //close resources
     }
}

Когда вызывается job.cancelAndJoin (), будет выброшено cancelException и код внутри catch и, наконец, будет выполнен.

...