2. What is RxJava?
RxJava is a Java VM implementation of ReactiveX (Reactive
Extensions): a library for composing asynchronous and
event-based programs by using observable sequences
See also: 2 minutes introduction to Rx
https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877#.rwup8ee0s
4. Threads
Handler handler = new Handler(Looper.getMainLooper());
new Thread(){
@Override
public void run() {
final String result = doHeavyTask();
handler.post(new Runnable() { // or runUIThread on Activity
@Override
public void run() {
showResult(result);
}
});
}
}.start();
7. AsyncTask
Pros:
- Deal with main thread
Cons:
- Hard way to handling error
- Not bound to activity/fragment lifecycle
- Not composable
- Nested AsyncTask
- “Antek Async”
8. Why Rx?
- Because multithreading is hard
- Execution context
- Powerful operators
- Composable
- No Callback Hell
- Etc ...
9. The Basic
The basic building blocks of reactive code are Observables
and Subscribers. An Observable emits items; a Subscriber
consumes those items.
The smallest building block is actually an Observer, but in practice you are most often using Subscriber because that's how
you hook up to Observables.
15. Simplest* Code - Using Lambda
Observable.just("Hello, World").subscribe(System.out::println);
*AFAIK
16. Observable Creation
Observable.create(Observable.onSubscribe)
from( ) — convert an Iterable or a Future or single value into an Observable
repeat( ) — create an Observable that emits a particular item or sequence of items repeatedly
timer( ) — create an Observable that emits a single item after a given delay
empty( ) — create an Observable that emits nothing and then completes
error( ) — create an Observable that emits nothing and then signals an error
never( ) — create an Observable that emits nothing at all
18. Filtering Operators
- filter( ) — filter items emitted by an Observable
- takeLast( ) — only emit the last n items emitted by an Observable
- takeLastBuffer( ) — emit the last n items emitted by an Observable, as a single list item
- skip( ) — ignore the first n items emitted by an Observable
- take( ) — emit only the first n items emitted by an Observable
- first( ) — emit only the first item emitted by an Observable, or the first item that meets some condition
- elementAt( ) — emit item n emitted by the source Observable
- timeout( ) — emit items from a source Observable, but issue an exception if no item is emitted in a
specified timespan
- distinct( ) — suppress duplicate items emitted by the source Observable
21. Transformation Operators
- map( ) — transform the items emitted by an Observable by applying a function to each of them
- flatMap( ) — transform the items emitted by an Observable into Observables, then flatten this into a
single Observable
- scan( ) — apply a function to each item emitted by an Observable, sequentially, and emit each
successive value
- groupBy( ) and groupByUntil( ) — divide an Observable into a set of Observables that emit groups of
items from the original Observable, organized by key
- buffer( ) — periodically gather items from an Observable into bundles and emit these bundles rather
than emitting the items one at a time
- window( ) — periodically subdivide items from an Observable into Observable windows and emit these
windows rather than emitting the items one at a time