RxJava-Android

总结自 给 Android 开发者的 RxJava 详解 by 扔物线

结构图

RxJava-Android_第1张图片
RxJava.png

各个类

观察者:

Observer

  • onNext() : 当被订阅时执行
  • onCompleted() : 所有onNext() 执行完毕后执行
  • onError() : 若onNext()过程出现异常,则执行,与onCompleted()互斥。

Subscriber

implement Observer和Subscription,并添加了onStart()方法。

  • onStart() : 在onNext()前调用,可用于数据初始化或做前期准备。总是在subscribe时的线程调用,且不能指定线程,所以不适合进行UI操作。
  • unsubscribe() : 解除订阅,不再对Observable的事件进行响应,在适当的适合解除订阅可以避免OOM。

Action0

常用于非显式订阅,因为call中没有参数,常用来充当onCompleted()。

Action1

常用于非显式订阅,因为call中有且仅有一个参数,常用来充当onNext()和onError()。

被观察者

Observable

持有Onsubscribe对象。
可使用observeOn()和subscribeOn()指定执行线程:

  • observeOn() 指定Subscriber所运行在的线程。或者叫做事件消费的线程。
  • subscribeOn() 指定subscribe()所发生的线程,即 Observable.OnSubscribe被激活时所处的线程。或者叫做事件产生的线程。
    参数有:
    Schedulers.immediate()/Schedulers.newThread()/Schedulers.io()/Schedulers.computation()/AndroidSchedulers.mainThread()
    加载数据常用:
.subscribeOn(Schedulers.io()) 
.observeOn(AndroidSchedulers.mainThread())

Onsubscribe

  • call(Subscriber) : 可调用Subscriber中的onNext/onCompleted/onError等方法。

实现方法

  1. 创建Observable
    a. 用Observable.create(),传入OnSubscribe对象,实现里面的call方法。
Observable observable = Observable.create(new Observable.OnSubscribe() {
    @Override
    public void call(Subscriber subscriber) {
        subscriber.onNext("Hello");
        subscriber.onNext("Hi");
        subscriber.onNext("Aloha");
        subscriber.onCompleted();
    }
});

b. 使用操作符just,参数有序,越靠前的参数执行顺序也越靠前。

Observable observable = Observable.just("Hello", "Hi", "Aloha");

c. 使用操作符from,参数为集。

String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);
  1. 创建Observer
    a. new Observer OR Subscriber,实现onNext()/onCompleted()/onError()。推荐实现Subscriber。
Subscriber subscriber = new Subscriber() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

b. 不完整回调,可只创建其中某个或某些。

Action1 onNextAction = new Action1() {
    // onNext()
    @Override
    public void call(String s) {
        Log.d(tag, s);
    }
};
Action1 onErrorAction = new Action1() {
    // onError()
    @Override
    public void call(Throwable throwable) {
        // Error handling
    }
};
Action0 onCompletedAction = new Action0() {
    // onCompleted()
    @Override
    public void call() {
        Log.d(tag, "completed");
    }
};
  1. 订阅
    a. new Observer OR Subscriber,则:
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);

b. 不完整定义,会自动创建Subscribe,并识别参数定义相关方法。

observable.subscribe(onNextAction);
observable.subscribe(onNextAction, onErrorAction);
observable.subscribe(onNextAction, onErrorAction, onCompletedAction);

你可能感兴趣的:(RxJava-Android)