Writing code on Android is difficult. Writing a high-quality code that involves concurrent and parallel tasks is even harder. Ensuring that this code will run without unforeseen race conditions is on the order of magnitude, more difficult. This is especially relevant today, when almost every application (server or client) is interacting with many remote components, modules, or dependencies. Quite often (almost in all cases) when the remote operation is being executed, it must be done asynchronously so that the program doesn’t wait on I/O and can do something a bit more useful than only waiting for the response. With this book, I hope to introduce a novice developer to a wide variety of tools that RxJava provides so that the developers can produce robust and high-quality code for their asynchronous tasks by building a relatively simple application that will use advanced RxJava techniques to produce a high-quality product. First of all, in Chapter 1, Building your First "Hello World" RxJava Application, the book will lead a developer through an initial setup of RxJava in Android environment. Later, the reader will learn RxJava 2.0 step-by-step by starting off with stock data processing and display. Along with this, a developer will learn to choose appropriate Schedulers and use Retrofit library for remote requests. In Chapter 8, Writing Custom Observables, we will continue by adding an integration to Twitter to process its streaming data by combining it with stock data. For this, we will utilize advanced RxJava techniques, such as creating custom observables and flatMap.
Finally, we will learn to write custom RxJava Observables, and we will explore a few different ways of organizing the RxJava code to make it easier to understand and maintain. In the end, we will do a brief overview of marble diagrams so that the developers will have an easier time understanding RxJava documentation.
After the reader finishes reading this book, he will be well versed in various RxJava techniques to create robust, reusable, and easily understandable code to manage various kinds of I/O operations or just do a general processing in a reactive way that follows functional paradigm.