Not only will you learn how to use RxJava to create complex reactive applications on Android, you’ll also see how to solve common application design issues by using RxJava, RxAndroid and RxKotlin. Finally, you’ll discover how to exercise full control over the library and leverage the full power of reactive programming in your apps. Specifically, learn to handle asynchronous event sequences via two key concepts in Rx—Observables and Observers. Hone your UI development with RxJava and companion libraries to make it easy to work with the UI of your apps, providing a reactive approach to handling user events. Dig into both intermediate and advanced topics, such as error handling, schedulers, app architecture, repositories, and integrating RxJava with Android Jetpack.
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.
In this part of the book, you’re going to learn about the basics of RxJava. You are going to have a look at what kinds of asynchronous programming problems RxJava addresses, and what kind of solutions it offers.
Further, you will learn about the few basic classes that allow you to create and observe event sequences, which are the foundation of the Rx framework.
You are going to start slow by learning about the basics and a little bit of theory. Please don’t skip these chapters! This will allow you to make good progress in the following sections when things get more complex.
In this chapter, you’ll use RxJava and your new observable super-powers to create an app that lets users to create nice photo collages — the reactive way.
Section II: Operators & Best Practices
Operators are the building blocks of Rx, which you can use to transform, process, and react to events emitted by Observables.
Just as you can combine simple arithmetic operators like +, -, and / to create complex math expressions, you can chain and compose together Rx’s simple operators to express complex app logic.
In this chapter, you are going to:
Start by looking into filtering operators, which allow you to process some events but ignore others.
Move on to transforming operators, which allow you to create and express complex data transformations. You can for example start with a button event, transform that into some kind of input, process that and return some output to show in the app UI.
Look into combining operators, which allow for powerful composition of most other operators.
Explore operators that allow you to do time based processing: delaying events, grouping events over periods of time, and more. Work though all the chapters, and by the end of this section you’ll be able to write simple RxJava apps!
This chapter will teach you about RxJava’s filtering operators that you can use to apply conditional constraints to “next” events, so that the subscriber only receives the elements it wants to deal with.
Even the best RxJava developers can’t avoid encountering errors. You’ll learn how to deal with errors, how to manage error recovery through retries, or just surrender yourself to the universe and letting the errors go.
This chapter will cover the beauty behind schedulers, where you’ll learn why the Rx abstraction is so powerful and why working with asynchronous programming is far less less painful than using locks or queues.
Beyond using the elements made available directly by RxJava, you can also create RxJava wrappers around existing non-Rx frameworks. You'll learn how to create and incorporate such wrappers into your reactive application.
Section IV: RxJava Community Cookbook
RxJava’s popularity keeps growing every day. Thanks to the friendly and creative community that formed around this library, a lot of community-driven Rx projects are being released on GitHub.
The advantage of the community-built libraries that use RxJava is that unlike the main repository, which needs to follow the Rx standard, these libraries can afford to experiment and explore different approaches, provide non multi-platform specializations, and more.
In this section you are going to look into just a few of the many community open source projects. The section contains four short cookbook-style chapters that look briefly into four community projects that help you with binding Android Views, talking to your server with Retrofit, persisting preferences data, and handling user permissions.
In earlier chapters, you've used Retrofit to add networking to your reactive apps. In this chapter, explore exactly how Retrofit interfaces with the Rx world and see how you can take advantage of all that it offers.
There's a fantastic library called RxPermissions that you'll use in this chapter to help alleviate the pain points of asking the user for permissions at runtime, giving you a reactive flow when requesting permissions.
Section V: Putting It All Together
The “easy” part of the book is over. If you made it this far and are looking to learn even more in order to start creating production apps with RxJava, this section is for you.
The two chapters in this section are going to help you learn how to build real-life applications with RxJava.
The first chapter will cover integrating RxJava with the components of Android Jetpack, in particular, the Room database library and the Paging library. The chapter will build off of knowledge you’ve gained earlier in the book working with the ViewModel and LiveData components of Jetpack.
The second chapter, and the last one in this book, is going to show you how to setup a reactive application architecture and how to convert callbacks to Rx Observables.
Once you finish working through this section, you will be one of the top RxJava developers out there. There is, of course, more to know about Rx but at this point you will be able to figure out things further on your own.
Also, don’t forget to give back to the community! It would not have been possible for us to put this book together without all the amazing Rx folks sharing their knowledge, code, and good vibes.
Android Jetpack is a suite of libraries provided by the Android team to make developing Android apps a breeze. You've already seen ViewModel and LiveData used with RxJava. In this chapter, you'll explore using the Room and Paging Library components from Jetpack in a reactive app.
To conclude this book, you’ll architect and code a small RxJava application. The goal is not to use Rx “at all costs”, but rather to make design decisions that lead to a tidy architecture with stable, predictable and modular behavior. The application is simple by design, to clearly present ideas you can use to architect your own applications.
By Marin Todorov, Alex Sullivan, Scott Gardner, Florent Pillet and Junior Bontognali
The book that teaches you to use RxJava, RxAndroid and RxKotlin to create complex reactive applications on Android and exercise full control over the library to leverage the full power of reactive programming in your apps.