Maybe actor approach would be a better fit here. E.g. create a single actor coroutine that processes all Android lifecycle events in order. This way you will not accidentally mess something up. Still have to be careful, since when Android asks you to destroy you cannot wait, but must cancel whatever you were doing and destroy immediately.