RxJava 初探

0.前言

本文主要记录RxJava的初步用法,以对RxJava有一个直观的感受。官网在这里,RxJava项目地址在这里。

1.基础知识

ReactiveX(响应式编程)根据官网介绍:ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.(ReactiveX是通过使用观察序列构成的异步和基于事件的程序库)也就是说通过观察者模式来完成的。既然是通过观察者模式实现的也就包含了观察者、被观察者、注册、发布等等概念了。

1.1基础结构

RxJava主要组成部分有observable, operator和susbscriber。一般响应式编程的信息流如下所示:
Observable -> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
也就是说,observable是事件的生产者,subscriber是事件最终的消费者。
因为subscriber通常在主线程中执行,因此设计上要求其代码尽可能简单,只对事件进行响应,而修改事件的工作全部由operator执行。

1.2 案例

先用最简单的例子来体会这个框架。
1)创建 Observable
Observable 即被观察者,决定以什么样的方式触发观察者。

Observable myObservable=Observable.create(new Observable.OnSubscribe()
         {
           @Override
           public void call(Subscriber sub)
          {
            sub.onNext("Hello, world!");
            sub.onCompleted();
          }
        }
);

2)创建Observer
Observer即观察者,决定事件被触发时会有怎么样的行为。

      Observer observer = new Observer() { 
                   @Override 
                   public void onNext(String s) {
                               System.out.println("Item: " + s);
                   } 
                   @Override 
                   public void onCompleted() {
                              System.out.println("Completed!");
                   } 
                   @Override 
                   public void onError(Throwable e) { 
                             System.out.println("Error!"); 
                   }
     };

3)订阅

      myObservable.subscribe(observer);

通过subscribe()方法就可以将观察者与被观察者进行连起来。

2.操作符

有时候需要对原始输入的事件进行变换以简化流程,这些功能的实现就需要operator来处理。

Observable.just("Hello, world!")  
 .map(new Func1() {  
     @Override  
     public String call(String s) {  
         return s + " -Dan";  
     }  
 })  
 .subscribe(s -> System.out.println(s));  

通过map()可以将原始的Hello, world!输入转换成Hello, world! -Dan传递给之后的处理流程。
这里有详细操作符。

3.线程

在RxJava中,你可以通过subscribeOn()来指定Observer的运行线程,通过observeOn()指定Subscriber的运行线程。这两个方法都是operator,因此它们可以像所有operator那样作用于任何的Observable。

参考:

http://codethink.me/2015/05/09/intro-of-rxjava/?utm_source=tuicool&utm_medium=referral
http://reactivex.io/documentation/operators.html
http://gank.io/post/560e15be2dca930e00da1083

你可能感兴趣的:(RxJava 初探)