Programming Android with Kotlin
by Pierre-Olivier Laurence, Amanda Hinchman-Dominguez, Mike Dunn, G. Blake Meike
Chapter 10. Flows
Up to now, we’ve covered coroutines, suspending functions, and how to deal with streams using Channels.
We’ve seen from the previous chapter that working with Channels implies starting coroutines to send and/or
receive from those Channels. The aforementioned coroutines are then hot entities that are sometimes
hard to debug, or can leak resources if they aren’t cancelled when they should be.
Flows, like Channels, are meant to handle asynchronous streams of data, but at a higher level of abstraction and with
better library tooling. Conceptually, Flows are similar to Sequences, except that each step of a Flow can be
asynchronous. It is also easy to integrate flows in structured concurrency, to avoid leaking resources.
However, Flows1 aren’t meant to
replace Channels. Channels are building blocks for flows. Channels are still appropriate in some architectures
such as in CSP (see Chapter 9). Nevertheless, you’ll see that flows suit most needs in asynchronous data
processing.
In this chapter, we’ll introduce you to cold and hot flows. You’ll see how cold flows can be a better choice when you want to make sure never to leak any resources. On the other hand, hot flows serve a different purpose such as when you need a “publish-subscribe” relationship between entities in your app. For example, you can implement an event bus using hot flows.
The best way to understand flows is to see how they are used in real-life applications. So this chapter will also go through a series ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access