ubu
08/17/2020, 11:29 AMViewModelScope from AAC, which works best for most of simple use cases, but when you want to cancel the job whose lifecycle is very specific, then there is a place for discussion. Suppose an operation should be run starting from onStart() call until there is a onStop() call. What would you suggest as good practice here to control this operation’s lifecycle?
I started by creating custom scope, inside which this operation would run, then i realised, that after cancellation this scope can’t be re-used. Then I thought that creating a new scope every time onStart() is called is a bad idea (or not?). So I switched to a nullable variable holding a reference to a Job created after launch { ... } in onStart(), which I cancel in onStop(). Seems normal, but what if you want to cancel a lot of different jobs between `onStart()`/()`onStop()` calls? I might want a strange thing to do: having a scope, which, when you cancel it, cancel all its children job, but could be reset to allow new coroutines to run. Perhaps, I do not understand properly which logic stands behind not allowing to re-use cancelled scope.
Thanks!Erik
08/17/2020, 11:41 AMlifecycleScope.launch {} a bunch of `Job`s in onStart and cancel them in onStop.
To keep track of all jobs at once, just use a class property private val jobs = mutableListOf<Job>() and simply add jobs to it: jobs += lifecycleScope.launch {}.
in onStop just jobs.forEach { it.cancel() } (which could be a nice extension on Collection<Job>)Erik
08/17/2020, 11:46 AMjobs.clear() in onStop