日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android RxJava(RxAndroid)的简单使用

發布時間:2024/4/15 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'io.reactivex:rxandroid:1.2.1'// Because RxAndroid releases are few and far between, it is recommended you also// explicitly depend on RxJava's latest version for bug fixes and new features.compile 'io.reactivex:rxjava:1.1.6'}

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就是如此設計,應該自有它的道理,只是給初學者造成的迷惑,我們需要注意一下。
但這里我想起當初張孝祥老師的面向對象的視頻中說過,人把門打開關閉。代碼怎么寫?

person.openDoor();person.closeDoor();

還是

door.open();door.close();

張老師說是后者,具體哪個對象擁有改變自身屬性的方法,這個方法就應該在哪個對象上。這樣的好處應該在并發環境下更明顯。
比如一個電話,很多人搶著打。

class Phone{public synchronized call(){}}

當調用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)的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。