RxJava 最簡單的入門
一,RxJava的概述
1.0 什么是RxJava
要知道RxJava是什么,那么你應該先去了解一下Rx。Rx的全稱是Reactive Extensions,直譯過來就是響應式擴展。Rx基于觀察者模式,他是一種編程模型,目標是提供一致的編程接口,幫助開發者更方便的處理異步數據流。
那么到底什么是RxJava呢?我對它的定義是:RxJava本質上是一個異步操作庫,是一個能讓你用極其簡潔的邏輯去處理繁瑣復雜任務的 異步 事件庫。
1.1 RxJava的好處
- 規范項目成員的代碼實現
- 讓復雜的邏輯變得有條理性
1.2 必須要了解的觀察者模式
TODO This
在這個事件中, 臺燈作為觀察者,開關作為被觀察者,臺燈透過電線來觀察開關的狀態來并做出相應的處理
觀察者.png
1.3 RxJava的基本元素
- Observable :被觀察者,事件源
- Subscriber/Observer :觀察者
- OnSubscribe :一個接口類,是連接被觀察者和觀察者的橋梁,另外要說明的是onSubscribe是Observable的一個局部變量
二,RxJava的簡單使用
2.1 使用步驟
-
導包: 在build.gradle中導入如下:
compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.5'
- 創建 被觀察者(Observerable<>)對象
- 創建 觀察者 (Subscriber或者Observer)對象
- 通過訂閱:把觀察者和被觀察者進行相互關聯
2.2 最簡單的實例演示
TODO This
三,RxJava的操作符詳解
3.1 創建操作:創建Observable(被觀察者)的操作符
- create : 使用OnSubscribe從頭創建一個Observable,這種方法比較簡單。需要注意的是,使用該方法創建時,建議在OnSubscribe#call方法中檢查訂閱狀態,以便及時停止發射數據或者運算。
- from :將一個Iterable, 一個Future, 或者一個數組,內部通過代理的方式轉換成一個Observable。代碼如下:
String[] array = {"hello", "rxJava"}; Observable<String> observable = Observable.from(array);
-
just:將一個或多個對象轉換成發射這個或這些對象的一個Observable。如果是單個對象,內部創建的是ScalarSynchronousObservable對象。如果是多個對象,則是調用了from方法創建。
Observable<String> observable1 = Observable.just("hello", "rxjava");
- empty : 創建一個什么都不做直接通知完成的Observable
- error : 創建一個什么都不做直接通知錯誤的Observable
- never : 創建一個什么都不做的Observable
3.2變換操作符:
-
map : 所謂變換,就是將事件序列中的對象或整個序列進行加工處理,轉換成不同的事件或事件序列。
//舉個栗子 //比如被觀察者產生的事件中只有圖片文件路徑;但是在觀察者這里只想要bitmap,那么就需要**類型變換**。 Observable.create(new Observable.just(getFilePath()) //使用map操作來完成類型轉換 .map(new Func1<String, Bitmap>() { @Override public Bitmap call(String s) { //顯然自定義的createBitmapFromPath(s)方法,是一個極其耗時的操作 return createBitmapFromPath(s); } }) .subscribe( //創建觀察者,作為事件傳遞的終點處理事件 new Subscriber<Bitmap>() { @Override public void onCompleted() { Log.d("DDDDDD","結束觀察...\n"); } @Override public void onError(Throwable e) { //出現錯誤會調用這個方法 } @Override public void onNext(Bitmap s) { //處理事件 showBitmap(s) } );
未完待續。。。
四,關于異步(線程調度)Scheduler
4.1 線程環境
RxJava的線程.png
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() 指定
- 這里注意的是: 有兩個重要的api
- subscribeOn( )
- observeOn( )
- 需要注意的是(對于初學者,先了解到此就足夠使用了):
- subscribeOn()它指示Observable在一個指定的調度器上 創建 (只作用于被觀察者創建階段)。只能指定一次,如果指定多次則以第一次為準
- observeOn()指定在事件傳遞(加工變換)和最終被處理(觀察者)的發生在哪一個調度器。可指定多次,每次指定完都在下一步生效。 </ul> </li> </ul>
來自:http://www.jianshu.com/p/1c5800b3ff39
本文由用戶 celuda 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!