What is Coroutine Scope in Kotlin: Simple Explanation and Example
CoroutineScope defines the lifecycle and context for coroutines, controlling when they start and stop. It helps manage coroutines by grouping them so they can be cancelled or completed together.How It Works
Think of a CoroutineScope like a container or a room where you launch your coroutines. This container decides how long the coroutines inside it live and when they should stop. If the container closes, all coroutines inside it stop too.
For example, in an app, you might have a scope tied to a screen. When the user leaves that screen, the scope closes and all coroutines related to that screen are cancelled automatically. This prevents coroutines from running when they are no longer needed, saving resources and avoiding bugs.
The scope also holds important information like the dispatcher, which decides on which thread the coroutine runs. This makes it easy to control coroutine behavior in one place.
Example
This example shows how to create a CoroutineScope and launch a coroutine inside it. The coroutine prints a message after a delay.
import kotlinx.coroutines.* fun main() = runBlocking { // Create a CoroutineScope with the default dispatcher val scope = CoroutineScope(Dispatchers.Default) // Launch a coroutine in the scope val job = scope.launch { delay(500L) println("Hello from coroutine scope!") } // Wait for the coroutine to finish job.join() }
When to Use
Use CoroutineScope whenever you want to manage multiple coroutines together, especially when their lifetime should be tied to a specific part of your program. For example:
- In Android apps, tie a scope to an Activity or ViewModel to cancel coroutines when the UI is destroyed.
- In server applications, use scopes to manage requests and cancel work if the client disconnects.
- When launching background tasks that should stop if the user logs out or the app closes.
This helps keep your app efficient and prevents memory leaks or unwanted work.
Key Points
- CoroutineScope controls the lifecycle of coroutines.
- It groups coroutines so they can be cancelled together.
- Scopes hold context like dispatchers to control coroutine execution.
- Using scopes prevents coroutines from running when no longer needed.
- Commonly used in UI and server code to manage work safely.