RxJava 最簡單的入門

celuda 8年前發布 | 23K 次閱讀 RxJava 安卓開發

一,RxJava的概述

1.0 什么是RxJava

要知道RxJava是什么,那么你應該先去了解一下Rx。Rx的全稱是Reactive Extensions,直譯過來就是響應式擴展。Rx基于觀察者模式,他是一種編程模型,目標是提供一致的編程接口,幫助開發者更方便的處理異步數據流。

那么到底什么是RxJava呢?我對它的定義是:RxJava本質上是一個異步操作庫,是一個能讓你用極其簡潔的邏輯去處理繁瑣復雜任務的 異步 事件庫。

1.1 RxJava的好處

  1. 規范項目成員的代碼實現
  2. 讓復雜的邏輯變得有條理性

1.2 必須要了解的觀察者模式

TODO This

在這個事件中, 臺燈作為觀察者,開關作為被觀察者,臺燈透過電線來觀察開關的狀態來并做出相應的處理

觀察者.png

1.3 RxJava的基本元素

  1. Observable :被觀察者,事件源
  2. Subscriber/Observer :觀察者
  3. OnSubscribe :一個接口類,是連接被觀察者和觀察者的橋梁,另外要說明的是onSubscribe是Observable的一個局部變量

二,RxJava的簡單使用

2.1 使用步驟

  1. 導包: 在build.gradle中導入如下:

    compile 'io.reactivex:rxandroid:1.2.0'
     compile 'io.reactivex:rxjava:1.1.5'
  2. 創建 被觀察者(Observerable<>)對象
  3. 創建 觀察者 (Subscriber或者Observer)對象
  4. 通過訂閱:把觀察者和被觀察者進行相互關聯

2.2 最簡單的實例演示

TODO This

三,RxJava的操作符詳解

3.1 創建操作:創建Observable(被觀察者)的操作符

  1. create : 使用OnSubscribe從頭創建一個Observable,這種方法比較簡單。需要注意的是,使用該方法創建時,建議在OnSubscribe#call方法中檢查訂閱狀態,以便及時停止發射數據或者運算。
  2. from :將一個Iterable, 一個Future, 或者一個數組,內部通過代理的方式轉換成一個Observable。代碼如下:
    String[] array = {"hello", "rxJava"};
     Observable<String> observable = Observable.from(array);
  3. just:將一個或多個對象轉換成發射這個或這些對象的一個Observable。如果是單個對象,內部創建的是ScalarSynchronousObservable對象。如果是多個對象,則是調用了from方法創建。

    Observable<String> observable1 = Observable.just("hello", "rxjava");
  4. empty : 創建一個什么都不做直接通知完成的Observable
  5. error : 創建一個什么都不做直接通知錯誤的Observable
  6. never : 創建一個什么都不做的Observable

3.2變換操作符:

  1. 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( )
    </li>
  • 需要注意的是(對于初學者,先了解到此就足夠使用了):
    • subscribeOn()它指示Observable在一個指定的調度器上 創建 (只作用于被觀察者創建階段)。只能指定一次,如果指定多次則以第一次為準
    • observeOn()指定在事件傳遞(加工變換)和最終被處理(觀察者)的發生在哪一個調度器。可指定多次,每次指定完都在下一步生效。
    • </ul> </li> </ul>

       

      來自:http://www.jianshu.com/p/1c5800b3ff39

       

 本文由用戶 celuda 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!