android RxJava(RxAndroid)的简单使用
今天,簡單講講android里如何使用RxJava(RxAndroid)。
?
Android框架系列:
一.android EventBus的簡單使用
二.android Glide簡單使用
三.android OKHttp的基本使用詳解
四.android RxJava(RxAndroid)的簡單使用
?
可能大家聽都沒有聽說過這個框架,但是現在其實已經很火了。在面試時,很多公司要求面試者會使用這個庫,所以在網上查找資料,學習了如何使用,這里記錄一下。
前言
RxAndroid是RxJava在Android上的一個擴展,大牛JakeWharton的項目。據說和Retorfit、OkHttp組合起來使用,效果不是一般的好。而且用它似乎可以完全替代eventBus和OTTO,這么牛的東西當然要研究研究了 ,看看它到底有多厲害。
正文
相關資源
RxJava的GitHub地址:https://github.com/ReactiveX/RxJava
RxAndroid的GitHub地址:https://github.com/ReactiveX/RxAndroid
中文文檔:https://mcxiaoke.gitbooks.io/rxdocs/content/
一篇寫的比較好的入門RxJava的文章的地址:http://gank.io/post/560e15be2dca930e00da1083
1.RxJava是干嘛的
Rx(Reactive Extensions)是一個庫,用來處理事件和異步任務,在很多語言上都有實現,RxJava是Rx在Java上的實現。簡單來說,RxJava就是處理異步的一個庫,最基本是基于觀察者模式來實現的。通過Obserable和Observer的機制,實現所謂響應式的編程體驗。
Android的童鞋都知道,處理異步事件,現有的AsyncTask、Handler,不錯的第三方事件總線EventBus、OTTO等等都可以處理。并且大部分童鞋應該都很熟練了。而且經我目前的學習來看,RxJava這個庫,上手確實有門檻,不是拿來就能用。但是作為一個猿,那些可能出現的優秀的框架技術,及時的跟進和學習是必要的,從中汲取營養才能幫助自己成長。況且有童鞋已經表示,它完全可以替代EventBus和OTTO,來看看吧。
2.RxJava的優勢
最概括的兩個字:簡潔。而且當業務越繁瑣越復雜時這一點就越顯出優勢——它能夠保持簡潔。
簡單的demo看不出來,真正投入項目使用了應該就有體會了。它提供的各種功能強悍的操作符真的很強大。
至于RxAndroid其實只是RxJava的一個擴展,它在RxJava的基礎上添加了一些針對Android系統的新API。因為我是在Android系統上編寫代碼測試,所以我就將之稱呼為RxAndroid了。其實大多講得基本上都是RxJava的知識點。這點需要大家注意。
?
如果需要在開發中用到RxAndroid,那么需要在
Android Studio中添加依賴
build.gradle中的
Observable,Subscribers
開發的人都知道監聽者模式,訂閱模式這些概念。而Observable和Subscribers的英文意思就是如此。我們大概也知道差不多和監聽者模式差不多。
- Observable事件源,被觀察者。
- Subcriblers 觀察者,事件訂閱者
- Observer 同Subcribler差不多
- subscribe() 方法,綁定Observable與Subcribler或者Observabler
很顯然,Observable對象發生動靜,然后通信Subcribers,然后Subcribers實現自己的業務邏輯。
Observable的創建
Observable
它沒有一個public的構造器,看源碼可知它創建的對象的方法原型如下:
public final static <T> Observable<T> create(OnSubscribe<T> f) {return new Observable<T>(hook.onCreate(f));}可以看見,它是靜態方法,接受一個OnSubscribe的參數,我們先不管它是什么,我們一步一步來,先創建一個對象再說。
Observable<String> mObservable = Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {}});當然除了create方法外,還有just()和from()方法也可以創建Observable對象,在這里我們先不管,先從最簡單的學起。
Subscriber的創建
創建比較簡單
Subscriber<String> mTestSubscriber = new Subscriber<String>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(String s) {}};要注意的是Subsriber是訂閱者,它和subscribe不一樣,后者是一個訂閱關系動作,將Observable與Subscriber綁定起來。
Observer的創建
Observer<String> mTestObsever = new Observer<String>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(String s) {}};可以看到Subscriber和Observer很相似。
而實際上Observer是一個接口,而Subscriber是它的一個抽象實現類。源碼如下:
public interface Observer<T> {}public abstract class Subscriber<T> implements Observer<T>, Subscription {}Obersevable與Subscriber的關聯
大家已經知道怎么創建Obeservable與Subscriber了,那么它們怎么聯系起來的呢?答案是subsribe方法。
mObservable.subscribe(mTestSubscriber);這里有一點迷惑性,一般來說正確的寫法似乎是這樣
mTestSubscriber.subscribe(mObservable);但RxJava中Api就是如此設計,應該自有它的道理,只是給初學者造成的迷惑,我們需要注意一下。
但這里我想起當初張孝祥老師的面向對象的視頻中說過,人把門打開關閉。代碼怎么寫?
還是
door.open();door.close();張老師說是后者,具體哪個對象擁有改變自身屬性的方法,這個方法就應該在哪個對象上。這樣的好處應該在并發環境下更明顯。
比如一個電話,很多人搶著打。
當調用Phone.call()的時候,如果有人占用,其他人自然要等待。但如果要設計成person.callPhone()的時候,問題就沒有這么好辦了。
好了,扯遠了。
回到主題,強調一下
聯系被觀察者與觀察者是通過subscribe()方法
Demo實例
接下來驗證的時候到了。寫了一個Demo,很簡單。
點擊一個按鈕,然后彈出一個Toast.這中間的流程就是應用了本文的內容。
效果如下:
?
代碼如下:
xml文件很簡單,就是一個簡單的布局里面有一個按鈕。
MainActivity.java
流程如下:
1. 創建Obsersevable對象與Subscriber對象。
2. 按鈕點擊時通過mObservable.subscribe(mTestSubscriber)方法去觸發Obsersevable中的OnSubscribe中的call()方法。
3. 在call方法中會調用subscriber的onNext()方法,而這里的subsriber就是mTestSubscriber。
4. mTestSubscriber在onNext()方法中處理接收到的字符串,然后進行處理,這里是彈出Toast.
需要注意的是,當call()中subscriber處理完所有的事件后,需要發送onCompleted()或者onError()方法來終結此次任務
?
簡單講講,這個寫的RxJava內容比較淺,但是入門足夠了,基本是參考網上一位博客大神的。我這里總結一下:就是先創建Observable事件源,然后Subcriblers 觀察者或者Observer,然后在時間發生時事件源調用subscribe() 方法通知觀察者,這樣就完成了事件的監聽。注意事件完成后要發送subscriber.onCompleted();結束事件。
?
我學習這個時寫的Demo:源碼下載
?
android RxJava(RxAndroid)的簡單使用就講完了。
?
就這么簡單。
總結
以上是生活随笔為你收集整理的android RxJava(RxAndroid)的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android OKHttp的基本使用详
- 下一篇: Android 解决: Failed t