RxJAVA初探

參考博主 扔物線給 Android 開發者的 RxJava 詳解,可點擊學習。

原文鏈接:RxJAVA

github鏈接:

GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

GitHub - ReactiveX/RxAndroid: RxJava bindings for Android

gradle依賴:

compile 'io.reactivex:rxjava:1.0.14'

compile 'io.reactivex:rxandroid:1.0.1'

注:此鏈接和依賴從RxJAVA - 簡書?中獲取,如不可用,請查看博客原文。

一.RxJAVA的定義:

RxJava 在 GitHub 主頁上的自我介紹是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程序的庫)。

原文鏈接:RxJAVA - 簡書

二.API 介紹和原理簡析:

1. 概念:擴展的觀察者模式

RxJava 的異步實現,是通過一種擴展的觀察者模式來實現的。

四個關鍵詞:被觀察者(observable),觀察者(observer),訂閱(subscribe),事件;

回調事件,除onNext()之外的兩個特殊事件:

onCompleted():事件隊列完結。把每個事件單獨分開,并以隊列的形式處理;

onError():事件隊列異常。在事件處理過程中出異常時,onError()會被觸發,同時隊列自動終止,不允許再有事件發出。

RxJAVA觀察者模式如下圖:

2.基本實現:

1).創建觀察者Observer,它決定觸發事件后的行為;

2).創建被觀察者Observable,它決定觸發什么事件以及觸發怎樣的事件;在回調方法中,調用Observer對象的回調方法,進行事件的傳遞,這就是觀察者模式;

create()方法是 RxJava 最基本的創造事件序列的方法,just(T...): 將傳入的參數依次發送出來:

Observable observable=Observable.just("Hello","Hi","Aloha");// 將會依次調用:// onNext("Hello");// onNext("Hi");// onNext("Aloha");// onCompleted();

from(T[])/from(Iterable): 將傳入的數組或Iterable拆分成具體對象后,依次發送出來。

String[]words={"Hello","Hi","Aloha"};

Observable observable=Observable.from(words);// 將會依次調用:// onNext("Hello");// onNext("Hi");// onNext("Aloha");// onCompleted();

原文鏈接:給 Android 開發者的 RxJava 詳解

3)Subscribe訂閱

observable.subscribe(observer);//observable.subscribe(subscriber);

3.線程控制,Scheduler(一)

在不指定線程的情況下,RxJAVA遵循的是線程不變的原則,如果需要切換線程,就需要用到Scheduler(調度器);

1)Scheduler的API

Schedulers.immediate()//直接在當前線程運行,相當于不指定線程。這是默認的Scheduler;

Schedulers.newThread()// 總是啟用新線程,并在新線程執行操作;

Schedulers.io(): I/O 操作(讀寫文件、讀寫數據庫、網絡信息交互等)所使用的Scheduler。行為模式和newThread()差不多,區別在于io()的內部實現是是用一個無數量上限的線程池,可以重用空閑的線程,因此多數情況下io()比newThread()更有效率。不要把計算工作放在io()中,可以避免創建不必要的線程;

Schedulers.computation(): 計算所使用的Scheduler。這個計算指的是 CPU 密集型計算,即不會被 I/O 等操作限制性能的操作,例如圖形的計算。這個Scheduler使用的固定的線程池,大小為 CPU 核數。不要把 I/O 操作放在computation()中,否則 I/O 操作的等待時間會浪費 CPU;

另外, Android 還有一個專用的AndroidSchedulers.mainThread(),它指定的操作將在 Android 主線程運行;

有了這幾個Scheduler,就可以使用subscribeOn()和observeOn()兩個方法來對線程進行控制了。 *subscribeOn(): 指定subscribe()所發生的線程,即Observable.OnSubscribe被激活時所處的線程。或者叫做事件產生的線程。 *observeOn(): 指定Subscriber所運行在的線程。或者叫做事件消費的線程。

4.變換

1)概念:所謂變換,就是將事件序列中的對象或整個序列進行加工處理,轉換成不同的事件或事件序列;

2)map(): 事件對象的直接變換,一對一的轉換

3)如果需要一對多的轉換,就需要用到flatMap();

4)變換的原理lift()

5.線程控制,Scheduler(二)

多次調用subscribeOn(),只有第一次起作用;

更多內容請參照原文 給 Android 開發者的 RxJava 詳解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容