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 Nishant Srivastava & Filip Babić.

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 a 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 cancellations.

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
Although experimental, channels are a very important API you can use with coroutines. In this chapter, you’ll create examples to understand what a channel is and how to act as a producer or consumer for it synchronously and asynchronously. You’ll understand how to use multiple channels in the case of multiple senders and receivers. You’ll finally compare channels with Java’s BlockingQueue.
Toggle description
In this chapter, you’ll write many examples to experiment with using channels with multiple receivers and emitted items need to be shared by all of them.
Toggle description
In this chapter, you’ll learn how coroutines can help implement a producer/consumer pattern using different types of producers and consumers. Another approach to running tasks in the background is to use the actors model. In the second part of this chapter, you’ll learn what an Actor is and how you can use it with coroutines.
Toggle description
In this chapter, you'll learn what Coroutine Flow is and how to use them in your project.
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.

The Android platform allows you to run background tasks in many different ways. In this chapter, you’ll see and implement examples for all of them. You’ll learn what Looper and Handler are and when to use an AsyncTask. You’ll finally see how coroutines can make the code more readable and efficient.
Toggle description
This chapter covers using Kotlin Coroutines in an Android app, covering working with various context; i.e. UI and background to simplify and manage code sequentially. It will cover converting async callbacks for long-running tasks, such as a database or network access into sequential tasks while also keeping track and handling of the app lifecycle.
Toggle description
This chapter covers fortifying the use of Kotlin Coroutines in an Android app; i.e. enabling logging, exception handling, debugging and testing of code that uses Kotlin Coroutines. You will also discover the Anko library.