RxJava学习笔记(一)


*** 学习参考博客:
***

1、在gradle中添加,加载RxJava框架:
compile 'io.reactivex:rxjava:1.1.2'

2、RxJava中主要涉及两个类:
被观察者类(可观察):Observable<T>
订阅者(事件)类:Observer<T>、Subscriber<T>(或者使用Action1)

3、使用说明:
观察者对象通过订阅订阅者对象来触发订阅者的回调事件。

4、被观察者初始化方式:

被观察者有多种初始化方式,一种是直接覆写call方法,在call方法里调用订阅对象的三个函数
(onNext、onComplete、onError),并将回调函数中需要的值对象直接赋值传递,如:

法一:
Observable<TestBean> mObservable2 = Observable.create(
new Observable.OnSubscribe<TestBean>()
{
/**
* @param subscriber 订阅者
*/
@Override
public void call(Subscriber<? super TestBean> subscriber)
{
//根据call里的next、complete、error调用的顺序调用,但调用顺序有讲究
//在若先调用error,则next和complete两者都不调用,若complete调用在next之前,则next不调用
//若call中任何都不调用,则三个函数都不执行
subscriber.onNext(bean1);
subscriber.onCompleted();
subscriber.onError(new AndroidException());
}
});

法二:
//此种方式,由RxJava框架调用依次调用next、complete、error,
//若正常调用complete,则error不再执行。
Observable<TestBean> mObservable1 = Observable.just(bean1, bean2, bean3, bean4);

法三:
//调用from的方法本质和just一致,都是依次发送,只是传入的形参不同
TestBean[] list = {
new TestBean(),
new TestBean(),
new TestBean(),
new TestBean()
};
Observable<TestBean> mBeanObservable = Observable.from(list);

5、订阅者三种实现方式:
法一:
直接创建订阅类的对象,需要覆写三个函数,分别对应订阅时、订阅完成成功、订阅完成失败,相比法三,多了一个onStart方法,这个方法将在onNext执行前调用,做一些准备工作,比如初始化onNext中需要的对象或数据
/**
* 订阅者对象,执行的动作
*/
Subscriber<TestBean> mSubscriber = new Subscriber<TestBean>()
{
@Override
public void onStart()
{
//在事件发送前(调用onNext方法前调用)
Log.i("Subscriber 订阅者", "onStart()");
}

@Override
public void onCompleted()
{
Log.i("Subscriber 订阅者", "onCompleted()");
}

@Override
public void onError(Throwable e)
{
Log.i("Subscriber 订阅者", "onError(Throwable e)");
}

@Override
public void onNext(TestBean testBean)
{
Log.i("Subscriber 订阅者", "onNext(TestBean testBean),testBean的值为:" + testBean.i);
}
};

法二:
不关注订阅操作结果onComplete和onError这两个回调,可以直接使用Action1(Action0, Action2等,Action后面接的数字代表了call方法中参数的个数,参数的类型可以在定义时指定)来创建订阅对象:
/**
* 当Subscriber订阅者对象不关注complete和error两种情况时
* 可以采用Action1来取代Subscriber对象执行回调
* Action1是RxJava框架中的一个抽象类
* 调用如:
* mObservable1.subscribe(onNextAction);
*/
Action1<TestBean> onNextAction = new Action1<TestBean>() {
@Override
public void call(TestBean s) {
Log.i("使用Action1调用:", "call(TestBean s)");
}
};

法三:
这个方法的本质其实也是法一的用法,框架会将Observer包装成Subscribe对象
/**
* 观察者
*/
Observer<TestBean> mObserver = new Observer<TestBean>()
{
@Override
public void onCompleted()
{ }

@Override
public void onError(Throwable e)
{ }

@Override
public void onNext(TestBean testBean)
{ }
};

6、被观察者通知订阅者并触发事件
mObservable1.subscribe(mSubscriber);
mObservable2.subscribe(onNextAction);
注意:被观察者和订阅者在创建时指定的泛型对象必须一致,否则编译时不会通过的。
(此处省掉Observable和Subscribe的实例化操作,看官自行实例化)

* 订阅事件,通知触发订阅事件:
Observable< TestBean> mObservable1;
Subscriber< TestBean> mSubscriber1;
mObservable1.subscribe(mSubscriber1);

Observable< String> mObservable2;
Subscriber< String> mSubscriber2;
mObservable2.subscribe(mSubscriber2);

* 取消订阅:
在取消订阅前,可以先调用mSubscriber1.isUnsubscribe();判断是否有订阅
mSubscriber1.unsubscribe();
mSubscriber2.unsubscribe();
取消订阅后不再接受监听者发来的事件,并能避免由于Observable对象持有subscribe对象导致的内存泄露。

7、使用不同方式创建Observable对象和不同的订阅者不同的调用过程:
被观察者的subscribe方法绑定订阅者会触发订阅者的事件
但要分情况说明:
* 观察者的构建的不同:
1)Observable.create方法构造的Observable对象:先触发自身覆写的call函数,再根据subscriber对象方法的调用去调用订阅者的方法


2)Observable.just方法构造的Observable对象:由框架直接调用订阅者实现的方法,依次调用onNext、onComplete(onNext执行成功)或onError(onNext执行失败)


* 订阅者的不同:
1)Subscriber<TestBean>对象实例:


2)Action1对象实例:不关注onComplete和onError的情况,call方法只对应onNext方法。


*Observable.create方法构造的Observable对象:


* Observable.just方法构造的Observable对象:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值