0.前言
本文主要記錄RxJava的初步用法,以對(duì)RxJava有一個(gè)直觀的感受。官網(wǎng)在這里异旧,RxJava項(xiàng)目地址在這里浴鸿。
1.基礎(chǔ)知識(shí)
ReactiveX(響應(yīng)式編程)根據(jù)官網(wǎng)介紹:ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.(ReactiveX是通過(guò)使用觀察序列構(gòu)成的異步和基于事件的程序庫(kù))也就是說(shuō)通過(guò)觀察者模式來(lái)完成的。既然是通過(guò)觀察者模式實(shí)現(xiàn)的也就包含了觀察者幔托、被觀察者、注冊(cè)、發(fā)布等等概念了胎许。
1.1基礎(chǔ)結(jié)構(gòu)
RxJava主要組成部分有observable, operator和susbscriber峻呛。一般響應(yīng)式編程的信息流如下所示:
Observable -> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
也就是說(shuō),observable是事件的生產(chǎn)者辜窑,subscriber是事件最終的消費(fèi)者钩述。
因?yàn)閟ubscriber通常在主線程中執(zhí)行,因此設(shè)計(jì)上要求其代碼盡可能簡(jiǎn)單穆碎,只對(duì)事件進(jìn)行響應(yīng)牙勘,而修改事件的工作全部由operator執(zhí)行。
1.2 案例
先用最簡(jiǎn)單的例子來(lái)體會(huì)這個(gè)框架所禀。
1)創(chuàng)建 Observable
Observable 即被觀察者方面,決定以什么樣的方式觸發(fā)觀察者。
Observable myObservable=Observable.create(new Observable.OnSubscribe<String>()
{
@Override
public void call(Subscriber<? super String> sub)
{
sub.onNext("Hello, world!");
sub.onCompleted();
}
}
);
2)創(chuàng)建Observer
Observer即觀察者色徘,決定事件被觸發(fā)時(shí)會(huì)有怎么樣的行為恭金。
Observer<String> observer = new Observer<String>() {
@Override
public void onNext(String s) {
System.out.println("Item: " + s);
}
@Override
public void onCompleted() {
System.out.println("Completed!");
}
@Override
public void onError(Throwable e) {
System.out.println("Error!");
}
};
3)訂閱
myObservable.subscribe(observer);
通過(guò)subscribe()
方法就可以將觀察者與被觀察者進(jìn)行連起來(lái)。
2.操作符
有時(shí)候需要對(duì)原始輸入的事件進(jìn)行變換以簡(jiǎn)化流程褂策,這些功能的實(shí)現(xiàn)就需要operator來(lái)處理横腿。
Observable.just("Hello, world!")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + " -Dan";
}
})
.subscribe(s -> System.out.println(s));
通過(guò)map()
可以將原始的Hello, world!
輸入轉(zhuǎn)換成Hello, world! -Dan
傳遞給之后的處理流程。
這里有詳細(xì)操作符斤寂。
3.線程
在RxJava中耿焊,你可以通過(guò)subscribeOn()來(lái)指定Observer的運(yùn)行線程,通過(guò)observeOn()指定Subscriber的運(yùn)行線程遍搞。這兩個(gè)方法都是operator罗侯,因此它們可以像所有operator那樣作用于任何的Observable。
參考:
http://codethink.me/2015/05/09/intro-of-rxjava/?utm_source=tuicool&utm_medium=referral
http://reactivex.io/documentation/operators.html
http://gank.io/post/560e15be2dca930e00da1083