目錄
- RxJava的概述
- 什么是RxJava
- Why 要使用 RxJava
- 必須要了解的觀察者
- RxJava的基本元素
- RxJava的簡(jiǎn)單使用
- 詳解常用操作符
- 關(guān)于異步
一锌钮,RxJava的概述
1.0 什么是RxJava
- 要知道RxJava是什么冕臭,那么你應(yīng)該先去了解一下Rx。Rx的全稱是Reactive Extensions扁藕,直譯過(guò)來(lái)就是響應(yīng)式擴(kuò)展。Rx基于觀察者模式欲险,他是一種編程模型吃度,目標(biāo)是提供一致的編程接口,幫助開(kāi)發(fā)者更方便的處理異步數(shù)據(jù)流责语。
- 那么到底什么是RxJava呢炮障?我對(duì)它的定義是:RxJava本質(zhì)上是一個(gè)異步操作庫(kù),是一個(gè)能讓你用極其簡(jiǎn)潔的邏輯去處理繁瑣復(fù)雜任務(wù)的
異步
事件庫(kù)坤候。
1.1 RxJava的好處
- 規(guī)范項(xiàng)目成員的代碼實(shí)現(xiàn)
- 讓復(fù)雜的邏輯變得有條理性
1.2 必須要了解的觀察者模式
TODO This
在這個(gè)事件中胁赢,臺(tái)燈作為觀察者,開(kāi)關(guān)作為被觀察者白筹,臺(tái)燈透過(guò)電線來(lái)觀察開(kāi)關(guān)的狀態(tài)來(lái)并做出相應(yīng)的處理
1.3 RxJava的基本元素
-
Observable
:被觀察者智末,事件源 -
Subscriber/Observer
:觀察者 -
OnSubscribe
:一個(gè)接口類,是連接被觀察者和觀察者的橋梁徒河,另外要說(shuō)明的是onSubscribe是Observable的一個(gè)局部變量
二系馆,RxJava的簡(jiǎn)單使用
2.1 使用步驟
-
導(dǎo)包: 在build.gradle中導(dǎo)入如下:
compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.5'
創(chuàng)建 被觀察者(Observerable<>)對(duì)象
創(chuàng)建 觀察者 (Subscriber或者Observer)對(duì)象
通過(guò)訂閱:把觀察者和被觀察者進(jìn)行相互關(guān)聯(lián)
2.2 最簡(jiǎn)單的實(shí)例演示
TODO This
三,RxJava的操作符詳解
3.1 創(chuàng)建操作:創(chuàng)建Observable(被觀察者)的操作符
create : 使用OnSubscribe從頭創(chuàng)建一個(gè)Observable顽照,這種方法比較簡(jiǎn)單由蘑。需要注意的是,使用該方法創(chuàng)建時(shí)代兵,建議在OnSubscribe#call方法中檢查訂閱狀態(tài)纵穿,以便及時(shí)停止發(fā)射數(shù)據(jù)或者運(yùn)算。
from :將一個(gè)Iterable, 一個(gè)Future, 或者一個(gè)數(shù)組奢人,內(nèi)部通過(guò)代理的方式轉(zhuǎn)換成一個(gè)Observable谓媒。代碼如下:
String[] array = {"hello", "rxJava"};
Observable<String> observable = Observable.from(array);-
just:將一個(gè)或多個(gè)對(duì)象轉(zhuǎn)換成發(fā)射這個(gè)或這些對(duì)象的一個(gè)Observable。如果是單個(gè)對(duì)象何乎,內(nèi)部創(chuàng)建的是ScalarSynchronousObservable對(duì)象句惯。如果是多個(gè)對(duì)象土辩,則是調(diào)用了from方法創(chuàng)建。
Observable<String> observable1 = Observable.just("hello", "rxjava");
empty: 創(chuàng)建一個(gè)什么都不做直接通知完成的Observable
error: 創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的Observable
never: 創(chuàng)建一個(gè)什么都不做的Observable
3.2變換操作符:
-
map : 所謂變換抢野,就是將事件序列中的對(duì)象或整個(gè)序列進(jìn)行加工處理拷淘,轉(zhuǎn)換成不同的事件或事件序列。
//舉個(gè)栗子 //比如被觀察者產(chǎn)生的事件中只有圖片文件路徑指孤;但是在觀察者這里只想要bitmap,那么就需要**類型變換**启涯。 Observable.create(new Observable.just(getFilePath()) //使用map操作來(lái)完成類型轉(zhuǎn)換 .map(new Func1<String, Bitmap>() { @Override public Bitmap call(String s) { //顯然自定義的createBitmapFromPath(s)方法,是一個(gè)極其耗時(shí)的操作 return createBitmapFromPath(s); } }) .subscribe( //創(chuàng)建觀察者恃轩,作為事件傳遞的終點(diǎn)處理事件 new Subscriber<Bitmap>() { @Override public void onCompleted() { Log.d("DDDDDD","結(jié)束觀察...\n"); } @Override public void onError(Throwable e) { //出現(xiàn)錯(cuò)誤會(huì)調(diào)用這個(gè)方法 } @Override public void onNext(Bitmap s) { //處理事件 showBitmap(s) } );
未完待續(xù)结洼。。叉跛。
四松忍,關(guān)于異步(線程調(diào)度)Scheduler
4.1 線程環(huán)境
Observable.just(1, 2, 3, 4) // IO 線程,由 subscribeOn() 指定
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.map(mapOperator) // 新線程筷厘,由 observeOn() 指定
.observeOn(Schedulers.io()) .map(mapOperator2) // IO 線程鸣峭,由 observeOn() 指定
.observeOn(AndroidSchedulers.mainThread)
.subscribe(subscriber); // Android 主線程,由 observeOn() 指定
- 這里注意的是: 有兩個(gè)重要的api
- subscribeOn( )
- observeOn( )
- 需要注意的是(對(duì)于初學(xué)者酥艳,先了解到此就足夠使用了):
- subscribeOn()它指示Observable在一個(gè)指定的調(diào)度器上創(chuàng)建(只作用于被觀察者創(chuàng)建階段)摊溶。只能指定一次,如果指定多次則以第一次為準(zhǔn)
- observeOn()指定在事件傳遞(加工變換)和最終被處理(觀察者)的發(fā)生在哪一個(gè)調(diào)度器充石∧唬可指定多次,每次指定完都在下一步生效赫冬。