本人,小猿一枚,最近玩了下rxjava,颇有感慨,有一种相见恨晚的感觉,于是做了如下总结,介绍给各位大婶。
rxjava 很类似asynctask的编码风格,但是比asynctask更灵活。
rxjava可以理解为 订阅和被订阅的事件模型,订阅和被订阅者可以连在一起写,也可以分开写,连在一起的 就不写了,网上很多。这里贴下分开写的。
/**
* 重新延迟读卡Observable
*/
private Observable observableReadCard = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
IMateManager.getInstance(mContext).peripheralcancel();
subscriber.onNext(readType);
}
});
/**
* 重新延迟读卡observer
*/
private Observer observerReadCard = new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer type) {
if (type == READ_CT_CARD) {
reInitCTCard();
} else {
reInitCard();
}
}
};
/**
* 重新读卡
*
* @param type 刷卡类型
*/
public void reReadCard(int type) {
readType = type;
observableReadCard.delay(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observerReadCard);
}
我先介绍下我的功能,是重新刷磁条银行卡和芯片银行卡的功能,在observerReadCard中做了一下事件分发。首先是observableReadCard 中对程序中刷银行卡资源的释放,然后在observerReadCard 中重新读卡操作。
reReadCard方法 是把observerReadCard和observableReadCard 订阅在一起。
精华部分:
observableReadCard.delay(1, TimeUnit.SECONDS) 延迟订阅1s,
subscribeOn(Schedulers.io()) 让observable发生在io线程。
observeOn(AndroidSchedulers.mainThread()) 让observerReadCard发生在主线程。
到此,可以看出rxjava对线程的操作和事件的时间处理上是很方便的,其中请求网络,更新UI就可以用这套模式,请求放在observerable中,设置在子线程中,更新放在observer中,设置在主线程中。
只需要再封装下,就更破费了。rxjava还有很多的用法,后面再介绍吧,本文到此结束。