Android & Kotlin

Kotlin Coroutines by Tutorials

Android is inherently asynchronous and event-driven, with strict requirements as to on which thread certain things can happen. Learn how to use Kotlin coroutines to solve common Android programming problems using asynchronous programming techniques! By Filip Babić & Luka Kordić.

Read for Free with the Personal Plan* * Includes this and all other books in our online library See all benefits
Buy Individually $59.99* *Includes access to all of our online reading features.
Leave a rating/review
Download materials
Buy paperback—Amazon Comments
Save for later

Who is this for?

This book is for intermediate Kotlin or Android developers who already know the basics of UI development but want to learn coroutine API to simplify and optimize their code.

Covered concepts

  • Asynchronous programming
  • Configuration
  • Coroutine principles
  • Suspending functions
  • Sequences & Iterators
  • Thread communication techniques

The importance of concurrency is discovered quite early on by people who start with Android development. Android is inherently asynchronous and event-driven, with strict requirements as to on which thread certain things can happen.

Add to this the often-cumbersome Java callback interfaces, and you will be trapped in spaghetti code...


Before You Begin

This section tells you a few things you need to know before you get started, such as what you’ll need for hardware and software, where to find the project files for this book, and more.

Section I: Introduction to Coroutines

In the first chapter, you’ll learn about the problems related to multithreading and how coroutines can be an elegant solution. After setting up your development environment in IntelliJ or Android Studio, you’ll start writing your first coroutine to understand what suspending functions are and how to define them. You’ll finish this section learning how to use async and await functions for efficient use of resources.

Toggle description
In this very first chapter, you’ll learn what asynchronous programming means and why a modern developer should understand it. You’ll see the basics of multithreading like queue and shared memory, and you’ll understand how to solve the "Indentation Hell Problem."
Toggle description
Learning through example is one of the most efficient ways to gain more skills. To do this, you need to set up your build environment and learn how to load the starting projects with IntelliJ or Android Studio. This chapter describes all you need to start writing your code.
Toggle description
This is the chapter where you’ll learn the main concepts about coroutines like builders, scope and context. You’ll see for the first time the Job object and learn how to manage dependencies between coroutines. You’ll understand and write code to manage one of the most important features of asynchronous tasks: cancellations.
Toggle description
To understand how to use coroutines, you need to learn what a suspending function is and how to implement it. In this chapter, you’ll learn all you need to create and use your suspending functions. You’ll also learn how to change your existing functions to use them in a coroutine.
Toggle description
In multithreading and asynchronous development in Java, you often use Runnable, Callable and Future. With coroutines, you can use Deferred instead. These are objects that you can manage using the async/await functions. In this chapter, you’ll write code to understand when and how to use this pattern most effectively.
Toggle description
This chapter is about one of the most important concepts about coroutines: Coroutine Context. You'll learn what it is and how this is related to the dependencies between different coroutine jobs. You'll also learn how to create your context.
Toggle description
In this chapter, you'll learn how to run different Jobs into the proper thread. You'll learn how to configure and use the proper thread to display information on the UI or to invoke different services on the network.
Toggle description
Using functions with a callback is not difficult only because of the indentation hell problem but also for error and exception handling. In this very important chapter, you’ll learn, with several examples, all the techniques you can use to handle exceptions.
Toggle description
One of the most important topics to master when you deal with multithreading is cancellation. Starting a thread is very easy compared to the techniques used to cancel it, leaving the system in a consistent state. In this very important chapter, you’ll learn, with several examples, all the techniques you can use to manage cancellation.

Section II: Channels & Flows

Coroutines provide you a set of suspending functions and coroutine builders for the most common use cases. In order to use them, you need to know some more details on how they work under the hood. In this section, you’ll explore channels, Coroutine Flow and testing your coroutines.

Sequences are one of the most interesting features of Kotlin because they allow generating values lazily. When you implement a sequence you use the yield function which is a suspending function. In this chapter, you’ll learn how to create sequences and how the yield function can be used to optimize performance.
Toggle description
In this chapter, you'll learn what Coroutine Flow is and how to use it in your project.
Toggle description
In this chapter you'll learn everything you need about two specific Flow implementations which allow you to handle multiple collectors: SharedFlow and StateFlow.
Toggle description
Testing is a fundamental part of the development process and coroutines are not different. In this chapter, you'll learn how to test coroutines using the main testing frameworks.

Section III: Coroutines & Android

Coroutines are becoming a very important tool for any Kotlin application and in particular for Android applications. They allow the creation of applications that are more readable and use simpler code. In this section, you’ll learn how to use coroutines as a valid option for running background tasks which interact with the UI thread.

Toggle description
In Android, it's important to offload heavy work to a background thread, leaving the main thread free to do its work. In this chapter, you'll learn different ways to achieve this. Finally, you'll see how Coroutines can make this task nice and elegant.
Toggle description
A breakdown of the common problems when collecting flows in the Android UI. Introduction to lifecycleScope and examples of its usage.
Toggle description
Learn how you can utilize Kotlin Coroutines to make your networking code simple and performant. You'll explore several ways of doing API calls with Retrofit library and coroutines.
Toggle description
Learn how to use Room's built-in support for coroutines to make your database communication as simple as possible.
Toggle description
Learn about using coroutines inside ViewModels and make your functions safe to execute on the main thread. Compare LiveData to Kotlin Flow and learn how to observe flows from Jetpack Compose safely. See how to test coroutines on Android.