RxJava 最简单的入门

96
铭宝宝真帅
2016.11.07 15:07* 字数 1106

目录

  1. RxJava的概述
    1. 什么是RxJava
    2. Why 要使用 RxJava
    3. 必须要了解的观察者
    4. RxJava的基本元素
  2. RxJava的简单使用
  3. 详解常用操作符
  4. 关于异步

一,RxJava的概述

1.0 什么是RxJava

  1. 要知道RxJava是什么,那么你应该先去了解一下Rx。Rx的全称是Reactive Extensions,直译过来就是响应式扩展。Rx基于观察者模式,他是一种编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。
  2. 那么到底什么是RxJava呢?我对它的定义是:RxJava本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。

    1.1 RxJava的好处

  3. 规范项目成员的代码实现
  4. 让复杂的逻辑变得有条理性

1.2 必须要了解的观察者模式

TODO This
在这个事件中,台灯作为观察者,开关作为被观察者,台灯透过电线来观察开关的状态来并做出相应的处理


观察者.png

1.3 RxJava的基本元素

  1. Observable:被观察者,事件源
  2. Subscriber/Observer:观察者
  3. OnSubscribe:一个接口类,是连接被观察者和观察者的桥梁,另外要说明的是onSubscribe是Observable的一个局部变量

二,RxJava的简单使用

2.1 使用步骤

  1. 导包: 在build.gradle中导入如下:

     compile 'io.reactivex:rxandroid:1.2.0'
     compile 'io.reactivex:rxjava:1.1.5'
  2. 创建 被观察者(Observerable<>)对象
  3. 创建 观察者 (Subscriber或者Observer)对象
  4. 通过订阅:把观察者和被观察者进行相互关联

2.2 最简单的实例演示

TODO This

三,RxJava的操作符详解


3.1 创建操作:创建Observable(被观察者)的操作符

  1. create : 使用OnSubscribe从头创建一个Observable,这种方法比较简单。需要注意的是,使用该方法创建时,建议在OnSubscribe#call方法中检查订阅状态,以便及时停止发射数据或者运算。
  2. from :将一个Iterable, 一个Future, 或者一个数组,内部通过代理的方式转换成一个Observable。代码如下:
     String[] array = {"hello", "rxJava"};
     Observable<String> observable = Observable.from(array);
  3. just:将一个或多个对象转换成发射这个或这些对象的一个Observable。如果是单个对象,内部创建的是ScalarSynchronousObservable对象。如果是多个对象,则是调用了from方法创建。

     Observable<String> observable1 = Observable.just("hello", "rxjava");
  4. empty: 创建一个什么都不做直接通知完成的Observable
  5. error: 创建一个什么都不做直接通知错误的Observable
  6. never: 创建一个什么都不做的Observable

3.2变换操作符:

  1. map : 所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。

     //举个栗子
     //比如被观察者产生的事件中只有图片文件路径;但是在观察者这里只想要bitmap,那么就需要**类型变换**。
      Observable.create(new Observable.just(getFilePath()) //使用map操作来完成类型转换
      .map(new Func1<String, Bitmap>() {
                @Override public Bitmap call(String s) { //显然自定义的createBitmapFromPath(s)方法,是一个极其耗时的操作 
                         return createBitmapFromPath(s); } }) 
     .subscribe( //创建观察者,作为事件传递的终点处理事件  
               new Subscriber<Bitmap>() { 
                       @Override
                       public void onCompleted() {                                                    
                             Log.d("DDDDDD","结束观察...\n"); 
                        }
                       @Override 
                       public void onError(Throwable e) { 
                               //出现错误会调用这个方法 
                       } 
                     @Override 
                     public void onNext(Bitmap s) { 
                               //处理事件 showBitmap(s)
                     }
            );

未完待续。。。

四,关于异步(线程调度)Scheduler

4.1 线程环境

RxJava的线程.png
  Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定 
        .subscribeOn(Schedulers.io()) 
        .observeOn(Schedulers.newThread())
        .map(mapOperator) // 新线程,由 observeOn() 指定 
        .observeOn(Schedulers.io()) .map(mapOperator2) // IO 线程,由 observeOn() 指定 
        .observeOn(AndroidSchedulers.mainThread) 
        .subscribe(subscriber); // Android 主线程,由 observeOn() 指定
  • 这里注意的是: 有两个重要的api
    • subscribeOn( )
    • observeOn( )
  • 需要注意的是(对于初学者,先了解到此就足够使用了):
    • subscribeOn()它指示Observable在一个指定的调度器上创建(只作用于被观察者创建阶段)。只能指定一次,如果指定多次则以第一次为准
    • observeOn()指定在事件传递(加工变换)和最终被处理(观察者)的发生在哪一个调度器。可指定多次,每次指定完都在下一步生效。
Android知识