RxJava Android 開發全家桶

weina 8年前發布 | 18K 次閱讀 RxJava 安卓開發 Android開發 移動開發

RxJava 在 Android 應用開發中越來越流行,但是由于其門檻稍高,初次使用不免遇到很多問題,例如在 RxJava 常見的錯誤用法不該使用 RxJava 的一些情況 中所描述的情況。為了避免這些常見的問題,很多民間高手開發了很多在 Android 應用中可以使用的 Rx 擴展類庫,組合使用這些類庫,可以更方便的使用 RxJava 并且可以避免一些常見的錯誤用法。 本文來介紹一些使用 RxJava 必備的擴展庫。

RxAndroid

RxAndroid 這個就毫無疑問了, Android 開發中使用 RxJava 必備元素,雖然里面只是提供了簡單的兩個功能。 AndroidSchedulers.mainThread() 和 AndroidSchedulers.handlerThread(handler) ,但這確是 Android 開發中最核心的功能之一。

RxBinding

RxBinding 是把 Android 中各種 UI 控件的事件轉換為 RxJava 中的數據流。這樣就可以把 UI 控件的事件當做 RxJava 中的數據流來使用了。 比如 View 的 onClick 事件,使用 RxView.clicks(view) 即可獲取到一個 Observable 對象,每當用戶點擊這個 View 的時候,該 Observable 對象就發射一個事件(onNext 被調用), Observable 的 Observer 訂閱者就可以通過 onNext 回調知道用戶點擊了 View。

RxLifecycle

RxLifecycle 配合 Activity/Fragment 生命周期來管理訂閱的。 由于 RxJava Observable 訂閱后(調用 subscribe 函數),一般會在后臺線程執行一些操作(比如訪問網絡請求數據),當后臺操作返回后,調用 Observer 的 onNext 等函數,然后在 更新 UI 狀態。 但是后臺線程請求是需要時間的,如果用戶點擊刷新按鈕請求新的微博信息,在刷新還沒有完成的時候,用戶退出了當前界面返回前面的界面,這個時候刷新的 Observable 如果不取消訂閱,則會導致之前的 Activity 無法被 JVM 回收導致內存泄露。 這就是 Android 里面的生命周期管理需要注意的地方,RxLifecycle 就是用來干這事的。比如下面的示例:

myObservable
    .compose(RxLifecycle.bindUntilEvent(lifecycle, ActivityEvent.DESTROY))
    .subscribe();
 

在 Activity 銷毀的時候, RxLifecycle 會自動取消訂閱這個 Observer。 這樣就不用自己手動管理了。

Retrofit

現在幾乎大部分的 Android 應用都需要請求網絡獲取數據,而Retrofit 就是用來簡化網絡請求的一個庫,并且支持 RxJava。比如:

    @GET("/users/{user}")
    Observable<User> user(@Path("user") String user);
 

上面的代碼定義了一個 GET 請求,請求的路徑是 /users/{user}并且帶有一個用戶名的參數。 返回的結果為 一個 Observable 。 這樣配合前面的 RxBinding,就可以很容易的實現一個 用戶點擊一個刷新按鈕去請求服務器數據的操作。

RxView.clicks(view).flatMap(v -> githubService.user(user)).subscribe();

SqlBrite

如果您的應用使用了 Sqlite 來保存數據的話,則SqlBrite 是個很好的配合 RxJava 使用的庫。

除了上面這些主要的類庫外,還有一些封裝其他 Android 服務的庫:

Rx Preferences 通過 RxJava 的方式來訪問 SharedPreferences。

RxPermissions 用于支持 Android M 動態權限申請的庫。

還有一些配合 Google Play Service 服務的庫:

RxFit 封裝了 Fitness API 的調用。

RxNotification 封裝了 firebase 通知 api。

Android-ReactiveLocation 封裝了 Google Play Service API 中和位置相關的 api。

如果您要是開發 Android Wear 應用的話,會使用到 Wearable API 來實現手表和手機直接的數據通信,則可以使用 RxWear 庫。

 

來自:http://blog.chengyunfeng.com/?p=1011

 

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