Book Image

Simplifying Android Development with Coroutines and Flows

By : Jomar Tigcal
Book Image

Simplifying Android Development with Coroutines and Flows

By: Jomar Tigcal

Overview of this book

Coroutines and flows are the new recommended way for developers to carry out asynchronous programming in Android using simple, modern, and testable code. This book will teach you how coroutines and flows work and how to use them in building Android applications, along with helping you to develop modern Android applications with asynchronous programming using real data. The book begins by showing you how to create and handle Kotlin coroutines on Android. You’ll explore asynchronous programming in Kotlin, and understand how to test Kotlin coroutines. Next, you'll learn about Kotlin flows on Android, and have a closer look at using Kotlin flows by getting to grips with handling flow cancellations and exceptions and testing the flows. By the end of this book, you'll have the skills you need to build high-quality and maintainable Android applications using coroutines and flows.
Table of Contents (11 chapters)
Part 1 – Kotlin Coroutines on Android
Part 2 – Kotlin Flows on Android

Using Flows in Android

In this section, we will start by using flows in Android for asynchronous programming. Flows are ideal for the parts of your application that involve live data updates.

A Flow of data is represented by the kotlinx.coroutines.flow.Flow interface. Flows emit multiple values of the same type one at a time. For example, Flow<String> is a flow that emits string values.

Android Jetpack libraries such as Room, Paging, DataStore, WorkManager, and Jetpack Compose include built-in support for Flow.

The Room database library added support for Flows, starting with version 2.2. This allows you to be notified of changes in the database values by using Flows.

If your Android application uses a Data Access Object (DAO) to display a list of movies, your project can have a DAO such as the following:

interface MovieDao {
    @Query("SELECT * FROM movies")
    fun getMovies(): List<Movie>