(一)RxJava初体验

作者: 吻中求胜 | 来源:发表于2016-07-30 18:24 被阅读358次

    ===================================

    • RxJava 是什么, 能解决什么问题
    • 对比其他技术理解为什么要选择RxJava
    • RxJava的相关API
    • RxJava在Android中的典型使用场景
    • RxJava在Android中与其他框架的融合

    今年听到最多的一个词,rxjava+retrofit。火爆程度简直不亚于房价。既然RxJava是今年很火的一门技术,那么要学习一门技术,就要带着这样的疑问,它究竟是什么?它能解决什么问题?对比现有的技术它有什么优势?


    RxJava 是什么?

    • github官方介绍:

      RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
      It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.

      RxJava运行在Java VM上的库,编写异步可观察序列和基于事件的程序。它扩展了观察者模式支持的数据/事件序列并将操作符允许您添加到序列组合在一起以声明的方式而担忧无关的抽象底层线程,同步,线程安全和并发数据结构。

    • 简单来说就是”观察者模式+迭代器模式+函数式编程”,它扩展了观察者模式,通过使用可观察的对象序列流来表述一系列事件,订阅者进行占点观察并对序列流做出反应(或持久化或输出显示等等);借鉴迭代器模式,对多个对象序列进行迭代输出,订阅者可以依次处理不同的对象序列;使用函数式编程思想(functional programming),极大简化问题解决的步骤。

    • 解决问题:

      让复杂的程序逻辑回归简单、清晰

    • RxJava 的四个基本概念:

      • Observable (可观察者/被观察者)
      • Observer (观察者/订阅者)
      • subscribe (订阅)
      • Event (事件)

    如何使用

    • build.gradle引入依赖

        compile 'io.reactivex:rxandroid:1.2.0'
        compile 'io.reactivex:rxjava:1.1.4'
      
    • 源码地址

        https://github.com/ReactiveX/RxJava 
        https://github.com/ReactiveX/RxAndroid 
      

    对比其他技术理解为什么要选择RxJava

    • Observable(被观察者) 和Subscriber(订阅者) 可以做任何事情

      • Observable可以是一个网络请求,Subscriber来显示请求结果;
      • Observable可以是一个数据库查询,Subscriber来显示查询结果;
      • Observable可以是按钮点击事件,Subscriber来响应点击事件;
      • Observable可以是大图片文件的加载解析, Subscriber来展示解析后的图片。

    RxJava 使用流程

    1. 创建 Observable 被观察者
    2. 初始化被观察(订阅)后的事件序列
    3. 创建 Observer/Subscriber 观察者/订阅者
    4. 订阅 Subscribe

    基本形式

    一个最基本的实现: 大家可能暂时看不出有什么作用,这里先讲清基本形式

          //创建一个Observable    /   事件处理
        Observable.create(new Observable.OnSubscribe<String>() {            
            @Override          
            public void call(Subscriber<? super String> subscriber) {         
    
                 subscriber.onNext("Hello rxjava");            
                //事件序列结束              
                subscriber.onCompleted();
        //              subscriber.onError();         
             }        
                //指定一个观察者/事件流程才会启动/在回调中接收结果      
              }).subscribe(new Subscriber<String>() {        
            @Override       
           public void onCompleted() {      
    
             }       
           @Override         
           public void onError(Throwable e) {  
     
             }        
    
           @Override        
           public void onNext(String s) {      
    
            }    
        });
          
    
      Observable.just(1, 2, 3)      
        .subscribe(new Observer<Integer>() {    
          @Override          
          public void onCompleted() {     
    
           }         
          @Override          
          public void onError(Throwable e) {      
    
           }         
          @Override        
          public void onNext(Integer integer) {       
    
           }    
      });
    
    
    String a[] = {"url1","url2","url3"};
     Observable.from(a)      
        .subscribe(new Observer<Integer>() {    
          @Override          
          public void onCompleted() {     
    
           }         
          @Override          
          public void onError(Throwable e) {      
    
           }         
          @Override        
          public void onNext(Integer integer) {       
    
           }    
      });
    

    另一种形式/Subscriber

     Observable.just(1, 2, 3)      
          .subscribe(new Subscriber<Integer>() {        
    
              @Override         
              public void onStart() {        
              super.onStart();
                  
             }         
             @Override        
             public void onCompleted() {
           
             }          
             @Override         
             public void onError(Throwable e) {
         
             }        
            @Override      
            public void onNext(Integer integer) {  
    
             }      
    });
    

    另一种形式/选择性的传入参数/编程中的闭包(将一个操作以对象的方式传入)

    Observable.just(1, 2, 3)      
        .subscribe(new Action1<Integer>() {   
           @Override      
           public void call(Integer integer) {     
    
           }   
     });
    
    
    Observable.just(1, 2, 3)     
     .subscribe(new Action1<Integer>() {      
      @Override   
         public void call(Integer integer) {
                System.out.println("onNext");
            }       
     }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
            }       
     }, new Action0() { 
           @Override
            public void call() {
                System.out.println("onCompleted");
            }
     });
    

    未完待续···

    相关文章

      网友评论

      • wanbo_:现在发现RxJava真是神技。:smiley:
        吻中求胜: @一只奇思妙想会做白日梦的喵 一起学习 Retrofit + RxJava

      本文标题:(一)RxJava初体验

      本文链接:https://www.haomeiwen.com/subject/pwxtsttx.html