of our separate tools together. Firebase just replaced most of these services, and everything was already streamlined for us."— Amine Laadhari, CTO/Co-Founder "Firebase was an obvious solution to our challenges. We were confident that we could rely on Google’s scale to accurately measure both user behavior and critical errors." — Iordanis Giannakakis, Lead Android Developer "We trust Firebase to provide a reliable and scalable mobile platform to support our business needs. Firebase was easy to implement, which allowed us to pick up benefits from multiple services in just a few days." — Bálint Orosz, Head of App Product
{ ValueEventListener listener = ref.addValueEventListener( new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { emitter.onNext(snapshot); } @Override public void onCancelled(DatabaseError error) { // Map DatabaseError into a throwable to conform to the API emitter.onError(RxFirebaseException.from(error)); } }); // When the subscription is cancelled, remove the listener emitter.setCancellation(() -> ref.removeEventListener(listener)); }, BackpressureMode.BUFFER); }
{ ValueEventListener listener = ref.addListenerForSingleValueEvent( new ValueEventListener() { // ... do the same as for addValueEventListener }); // When the subscription is cancelled, remove the listener subscriber.add(Subscriptions.create(() -> ref.removeEventListener(listener))); }); }
are imperative • Presenter contains some logic to combine data streams and update the view • Presenter has a lifecycle • Stream error handling • Multiple presenters and communication between them • Managing state
Redux attempts to make state mutations predictable by imposing certain restrictions on how and when updates can happen. These restrictions are reflected in the three principles of Redux.
of your whole application is stored in an object tree within a single store. • State is read-only - The only way to change the state is to emit an action, an object describing what happened. • Changes are made with pure functions - To specify how the state tree is transformed by actions, you write pure reducers.