RxJava

RxJava


2016/2/19 15:03:53

看了大头鬼翻译的rxJava。这里写写我认为重要的点。

核心思想

RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据。。。)

一个observable 可以发出0个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束

各位看官看到这是不是说这就是观察者模式思想。但是这和真正的观察者有点区别:如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。

  • observable的创建。

    1. 简单构建Observable.create(OnSubscribe f)
    2. RxJava内置了很多简化创建Observable对象的函数

      1. Observable.just()就是用来创建只发出一个事件就结束的Observable对象

      2. Observable.from() 方法,它接收一个集合作为输入,然后每次输出一个元素给subscriber

  • 操作符(Operators)解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件

    (一些基本的操作符:)

    1. map操作符:

      Observable map(Func1 < ? super T, ? extends R> func)我们最初希望Subscriber 收到的类型是 T 类型的。但是经过 map 的转换,Subscriber 收到的是 R类型的数据

      Observable.just("Hello, world!")
        .map(new Func1<String, String>() {
            @Override
            public String call(String s) {
                return s + " ---";
            }
        })
        .subscribe(s -> System.out.println(s));
      
    2. flatMap操作符:

      Observable flatMap(Func1< ? super T, ? extends Observable< ? extends R>> func) 接收一个 Observable 的输出作为输入,同时输出另外一个Observable

      ```
      query("Hello, world!")
          .flatMap(new Func1<List<String>, Observable<String>>() {
              @Override
              public Observable<String> call(List<String> urls) {
                  return Observable.from(urls);
              }
          })
          .subscribe(url -> System.out.println(url));
      ```
      
    3. filter操作符:
      Observable< T > filter ( Func1<?super T, Boolean> predicate )添加过滤条件。

    4. take操作符

      输出最多指定数量的结果
      Observable take(final int count)
      Observable take(long time, TimeUnit unit)
      Observable take(long time, TimeUnit unit, Scheduler scheduler)

注意:(来自大头鬼)

1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。

2.Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。

错误处理

Subscriber 对象需要实现三个方法。onNext(T t) , onCompleted() , onError(Throwable e)

  1. 只要有异常发生onError()一定会被调用,在这里可以做一下异常处理。
  2. 操作符不需要处理异常,bserverable的操作符调用链中一旦有一个抛出了异常,就会直接执行onError()方法。
  3. 你能够知道什么时候订阅者已经接收了全部的数据 onCompleted()

调度器

Android的一些耗时操作需要再子线程进行。否则会产生ANR。所以我们使用subscribeOn()指定观察者代码运行的线程,使用 observerOn()指定订阅者运行的线程

  1. subscribeOn 指定Schedulers四个线程模式 :Schedulers.newThread() 新线程 Schedulers.computation() 计算线程
    Schedulers.io() IO线程
  2. observerOn() 可以把运行的结果发送回到指定线程,比如是AndroidSchedulers.mainThread()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值