Chapter 10. Flows
Up to now, we’ve covered coroutines, suspending functions, and how to deal with streams using Channel
s.
We’ve seen from the previous chapter that working with Channel
s implies starting coroutines to send and/or
receive from those Channel
s. 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.
Flow
s, like Channel
s, are meant to handle asynchronous streams of data, but at a higher level of abstraction and with
better library tooling. Conceptually, Flow
s are similar to Sequence
s, 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, Flow
s1 aren’t meant to
replace Channel
s. Channel
s are building blocks for flows. Channel
s 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 ...
Get Programming Android with Kotlin now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.