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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android】RxJava的使用(一)基本用法

發布時間:2025/6/17 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android】RxJava的使用(一)基本用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近經常看到RxJava這個字眼,也看到很多人在博客中推薦使用RxJava。好奇的我怎么能錯過,于是Google了一下,說RxJava好用的和說RxJava難用的都有,于是自己也親自嘗試了一下(感覺不容易上手)。寫博客記錄下學習的過程,一方面作為鞏固,另一方面希望能幫助到初學者。
(第一篇只介紹了RxJava的基本用法,暫時還無法看出RxJava的優勢。切莫著急,隨著慢慢深入就能體會到RxJava帶來的方便了)

參考:給 Android 開發者的 RxJava 詳解
(本文部分內容引用自該博客)

介紹

在GitHub主頁上的介紹:

a library for composing asynchronous and event-based programs using observable sequences for the Java VM

翻譯過來就是:

一個在 Java VM 上使用可觀測的序列來組成異步的、基于事件的程序的庫

對于新手們來說這個太抽象了,我們(我也是新手)需要看到看到一個更加具體的解釋,簡單來說,它就是一個實現異步操作的庫。(還是不懂?看代碼更實在)

優點

RxJava的好處就在于它的簡潔性,邏輯簡單的時候看不出RxJava的優勢,想必大家都知道在調度過程比較復雜的情況下,異步代碼經常會既難寫也難被讀懂。這時候RxJava的優勢就來了,隨著程序邏輯變得越來越復雜,它依然能夠保持簡潔。

觀察者模式

首先要先介紹一下觀察者模式(可能比喻的不夠恰當,意思到了就好);

  • 觀察者:監視著被觀察者的行為,當被觀察者某個狀態改變的時候會通知觀察者觀察者會執行對應的操作;
  • 被觀察者:被監視的對象,當某個狀態改變的時候會通知觀察者
  • 訂閱(或注冊):將觀察者被觀察者建立聯系。

(很亂?來個栗子?)

這里舉一個我個常用的例子,點擊Button后觸發OnClickListener
中的onClick()事件。在這個事件中他們的角色分別如下:

  • 觀察者:OnClickListener;
  • 被觀察者:Button;
  • 訂閱(或注冊):setOnClickListener()。

RxJava

在上面介紹了觀察者模式,這里也將RxJava中的三個角色進行一下角色分配

  • 觀察者:Observer;
  • 被觀察者:Observable;
  • 訂閱(或注冊):subscribe()。
  • 觀察者

Observer 即觀察者,它決定事件觸發的時候將有怎樣的行為。
RxJava 觀察者的事件回調方法除了普通事件onNext()(相當于onClick()/onEvent())之外,還定義了兩個特殊的事件:onCompleted()和onError()。

  • onCompleted(): 事件隊列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個隊列。RxJava 規定,當不會再有新的onNext()發出時,需要觸發onCompleted()方法作為標志。
  • onError(): 事件隊列異常。在事件處理過程中出異常時,onError()

會被觸發,同時隊列自動終止,不允許再有事件發出。

  • 在一個正確運行的事件序列中,onCompleted()和onError()有且只有一個,并且是事件序列中的最后一個。需要注意的是,onCompleted()

和onError()二者也是互斥的,即在隊列中調用了其中一個,就不應該再調用另一個。

  • 被觀察者

Observable 即被觀察者,它決定什么時候觸發事件以及觸發怎樣的事件。可以使用create()、just(T...)、from(T[])或from(Iterable<? extends T>)來創建一個 Observable ,并為它定義事件觸發規則。

  • 訂閱

創建了Observable和Observer之后,再用subscribe()方法將它們聯結起來

直接看代碼吧,這里只展示了RxJava的基本用法,暫時看不出RxJava的優勢。

使用

例:打印機個字符串
添加依賴

compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1' //創建一個觀察者Observer<String> observer = new Observer<String>() {@Overridepublic void onCompleted() {Log.i(TAG, "Completed");}@Overridepublic void onError(Throwable e) {Log.i(TAG, "Error");}@Overridepublic void onNext(String s) {Log.i(TAG, s);}};//使用Observable.create()創建被觀察者Observable observable1 = Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {subscriber.onNext("Hello");subscriber.onNext("Wrold");subscriber.onCompleted();}});//訂閱observable1.subscribe(observer); 以上用到的都是rx包里面的,別用錯了!!!

上面完成了一次Rxjava的基本使用。

擴展

  • Subscriber

除了Observer接口之外,RxJava 還內置了一個實現了Observer的抽象:Subscriber。Subscriber對Observer接口進行了一些擴展,但他們的基本使用方式是完全一樣的:

Subscriber<String> subscriber = new Subscriber<String>() {@Overridepublic void onNext(String s) {Log.d(tag, "Item: " + s);}@Overridepublic void onCompleted() {Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) {Log.d(tag, "Error!");} };

不僅基本使用方式一樣,實質上,在 RxJava 的 subscribe 過程中,Observer也總是會先被轉換成一個Subscriber再使用。如圖:

所以如果你只想使用基本功能,選擇Observer和Subscriber是完全一樣的。它們的區別對于使用者來說主要有兩點:

  • onStart(): 這是Subscriber增加的方法。它會在 subscribe 剛開始,而事件還未發送之前被調用,可以用于做一些準備工作,例如數據的清零或重置。這是一個可選方法,默認情況下它的實現為空。需要注意的是,如果對準備工作的線程有要求(例如彈出一個顯示進度的對話框,這必須在主線程執行),onStart()就不適用了,因為它總是在 subscribe 所發生的線程被調用,而不能指定線程。要在指定的線程來做準備工作,可以使用doOnSubscribe()方法,具體可以在后面的文中看到。
  • unsubscribe(): 這是Subscriber所實現的另一個接口Subscription

的方法,用于取消訂閱。在這個方法被調用后,Subscriber將不再接收事件。一般在這個方法調用前,可以使用isUnsubscribed()先判斷一下狀態。unsubscribe()這個方法很重要,因為在subscribe()之后,Observable會持有Subscriber的引用,這個引用如果不能及時被釋放,將有內存泄露的風險。所以最好保持一個原則:要在不再使用的時候盡快在合適的地方(例如onPause()onStop()等方法中)調用unsubscribe()來解除引用關系,以避免內存泄露的發生。

  • Observable

Observable的其他幾種創建方法,一下Observable等價于之前使用Create()創建的Observable:
1、使用Observable.just()創建被觀察者

Observable observable2 = Observable.just("Hello", "World");

2、使用Observable.from()創建被觀察者

String [] words = {"Hello", "World"}; Observable observable3 = Observable.from(words);

List<String> list = new ArrayList<String>(); list.add("Hellow"); list.add("Wrold"); Observable observable4 = Observable.from(list);

小結

目前沒看出RxJava的任何好處,感覺代碼還多了~~~
(別急,因為是第一篇,我只介紹了他們之間的關系以及最基礎的用法。后面的幾篇我會介紹RxJava的其他功能,還有一些復雜的嵌套關系的處理,到時候知道RxJava的強大之處了)

更多:
Android RxJava的使用(二)Action
Android RxJava的使用(三)轉換(map、flatMap)
Android RxJava的使用(四)線程控制 —— Scheduler

以上有錯誤之處感謝指出

總結

以上是生活随笔為你收集整理的【Android】RxJava的使用(一)基本用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 福利视频一区二区 | 国产精品美女久久久久久久 | 亚洲精品专区 | 91捆绑91紧缚调教91 | 欧美熟妇激情一区二区三区 | 日韩成人专区 | 国产视频一区二区三区在线观看 | 欧美一区二区三区粗大 | 久久久久一区 | 午夜在线 | 国产一级片免费看 | 麻豆国产免费 | 色二区| 黄色工厂这里只有精品 | 97caocao| 精品三级电影 | 香蕉在线观看视频 | 美女天天干| 久久国产精品久久久 | 777在线视频 | 国产精品一级视频 | 日韩色在线观看 | 26uuu精品一区二区在线观看 | 强伦人妻一区二区三区视频18 | 精久久久久久久 | 91黄漫| a级全黄| 欧美风情第一页 | 日韩精品理论 | 高跟丝袜av| 任我爽在线 | 爱情岛亚洲品质自拍极速福利网站 | 午夜8888 | 韩日中文字幕 | 高跟肉丝丝袜呻吟啪啪网站av | 精品字幕 | 青娱乐久久 | 久久九精品 | 日本www视频| 日本亚洲黄色 | 黄色网炮 | 丰满人妻一区二区三区在线 | 亚洲清色| 色黄大色黄女片免费中国 | 波多野结衣在线免费观看视频 | 国产精品久久久毛片 | 少妇人妻一级a毛片 | 96精品在线 | 午夜肉体高潮免费毛片 | 成人激情小说网站 | 国产成人免费电影 | 亚洲欧美视频在线观看 | 黄色永久免费网站 | 黄色男人的天堂 | 一二三四国产精品 | va视频在线 | www成人啪啪18软件 | 国产又爽又黄又嫩又猛又粗 | 亚洲欧美一区二区在线观看 | 午夜视频www| 欧日韩一区二区三区 | 色 综合 欧美 亚洲 国产 | 91精品视频免费看 | 中文字幕有码在线播放 | 日韩黄色在线播放 | 久久观看 | 99精品免费在线观看 | 日韩一区二区在线播放 | 淫欲少妇| 爱视频福利网 | 夜夜激情| 亚洲一区二区三区影院 | 欧美手机看片 | 中文字幕永久在线 | 色播欧美| av天天看| av成人天堂| 中文字幕一区二区三区5566 | 青草青在线视频 | 日本视频精品 | 亚洲综合色网 | 久久久精品人妻av一区二区三区 | 无码av天堂一区二区三区 | 欧美一级特黄aaaaaa大片在线观看 | jlzzjlzz亚洲女人 | 国产精品久久久久久久蜜臀 | 免费观看黄色网 | 久久网站免费看 | 永久中文字幕 | 国产激情视频一区二区三区 | 日本不卡一区二区三区在线观看 | 一级在线免费视频 | 国产日韩精品在线观看 | 涩涩在线观看 | 99热视| 成人综合婷婷国产精品久久 | 男人的天堂日韩 | 91亚洲影院| 福利毛片 |