Rxjava和RxAndroid系列(一)

时间:2023-01-28 17:49:45

一:什么是RxJava:

      RxJava是由Netflix开发的响应式扩展(Reactive Extensions)的Java实现。引用MSDN上对它的定义,Reactive Extensions是这样一个第三方库:它结合了可观察集合和LINQ式查询以达到异步和基于事件的编程效果。Netflix将这个库托管到了Github上,支持Java6以上的版本并且使它可以用于Android App开发。

    rx框架扩展了观察者模式,添加相应操作符(函数),以支持对事件序列进行处理,使你可以无需关心异步编程,线程安全,非阻塞io等技术细节。

    响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的)。 Observable发送消息,而Subscriber则用于消费消息。消息的发送是有固定模式的。Observable可以发送任意数量的消息(包括空消息), 当消息被成功处理或者出错时,流程结束。Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。 这看起来像标准的观察者模式, 但不同的一个关键点是:Observables一般只有等到有Subscriber订阅它, 才会开始发送消息(术语上讲就是热启动Observable和冷启动Observable。热启动Observable任何时候都会发送消息, 即使没有任何观察者监听它。冷启动Observable只有在至少有一个订阅者的时候才会发送消息)

二:如何去使用Rxjava

      不论是githup上还是其官方网站上都有其依赖包 地址:https://github.com/ReactiveX/RxJava,官方包的下载地址: https://github.com/ReactiveX/RxJava/releases  我使用的是AndroidStudio 下载好了jar包之后就可以直接使用就好了,接下来就可以自己创建Android项目来使用RxJava了(注意这里是RxJava不是RxAndroid),后面会介绍关于RxAndroid的内容:

三:第一个例子(Hello World)

创建第一个观察者模式的函数:

 private  Observable <String>  createObserver(){
     return  Observable.create new Observable.OnSubscribe<String>() {
               @Override
             public void call(Subscriber<? super String> sub) {
                  sub.onNext("Hello, world!");
                  sub.onCompleted();
           }
        }
    );
}

创建一个订阅者模式的函数:

private Subscriber<String> createSubscribler(){
    return  new Subscriber<String>() {
     @Override
     public void onNext(String s) { System.out.println(s); }
     @Override
     public void onCompleted() { }
     @Override
     public void onError(Throwable e) { }
   };
}


在你需要调用的时候应用就可以了

private void init(){
  Observable <String> myObserver = createObserver();
  Subscriber <String>  mySubscriber = createSubscriber();
  myObserver.subscrible(mySubscrible);
}

上述代码可以简化成

 private void demo(){
     Observable.just("the string you want to send")
            .subscriber(new Action1<String>(){
            @Override
             public void call(String s){
                    /**** do something you want **********/  
              }
       } );
}

just表示只发出一个消息,这样就可以省去了你要发出消息的操作


当你想要添加一些操作的时候可以用Map操作符来添加操作,操作符是很强大的功能,后面会接着去介绍

  private void demo2() {
                Observable.just("the string you want to send")
                .map(new Func1<String, String>() {
                       public String call(String s) {
                         return s + ",添加了Map的使用";
                      }})
                .map(new Func1<String, String>() {
                      public String call(String SS){
                        return  SS+",添加了Map中的多次修改";
                    }
                })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        /****** do something you want ******/
                    }
                });
    }

好了,这个是应用举例,类似于我们学习一门语言中的输出hello world ,后面会接着更新!


RxJava和RxAndroid用的越来越多,希望越来越多的人来研究一下这个。