Canceling Kotlin Flows
In this section, we will start by looking at Kotlin Flow cancelations. Like coroutines, Flows can also be canceled manually or automatically.
In Chapter 3, Handling Coroutine Cancelations and Exceptions, we learned about canceling coroutines and that coroutine cancellation must be cooperative. As Kotlin Flows are built on top of coroutines, Flow follows the cooperative cancellation of coroutines.
Flows created using the flow{}
builder are cancellable by default. Each emit
call to send new values to the Flow also calls ensureActive
internally. This checks whether the coroutine is still active, and if not, it will throw CancellationException
.
For example, we can use the flow{}
builder to create a cancellable Flow, as shown in the following:
class MovieViewModel : ViewModel() {
...
fun fetchMovies(): Flow<Movie> = flow {
movieRepository.fetchMovies...