The idea is that you can arrange to do work when particular lifecycle events occur, and you can launch coroutines or consume flows and channels as part of that processing. The CoroutineScope used for the lambda expression is the same basic scope as lifecycleScope gives you, so it will be canceled once the associated Lifecycle is destroyed. It will also be canceled once the lifecycle leaves the requested state — whenResumed(), for example, will be canceled once the lifecycle leaves the resumed state (e.g., after onPause() is called on the activity/fragment).