Android:手把手帶你入門神祕的 Rxjava

前言

  • Rxjava因爲其基於事件流的鏈式調用、邏輯簡潔 & 使用簡單的特色,深受各大 Android開發者的歡迎。

Github截圖

  • 本文主要:java

    1. 面向 剛接觸Rxjava的初學者
    2. 提供了一份 清晰、簡潔、易懂的Rxjava入門教程git

       

    3. 解決的是初學者不理解Rxjava原理 & 不懂得如何使用的問題github

但願大家會喜歡。異步

  1.  
  2.  
  3.  

示意圖

目錄

示意圖

1. 定義

  • RxJava 在 GitHub 的介紹:
 
  • 1
  • 2
  • 總結:RxJava 是一個 基於事件流、實現異步操做的庫

2. 做用

實現異步操做函數

 

3. 特色

因爲 RxJava的使用方式是:基於事件流的鏈式調用,因此使得 RxJava測試

  • 邏輯簡潔
  • 實現優雅
  • 使用簡單

更重要的是,隨着程序邏輯的複雜性提升,它依然可以保持簡潔 & 優雅spa

4. 原理

4.1 生活例子引入

  • 我用一個生活例子引入 & 講解 Rxjava原理: 顧客到飯店吃飯

示意圖

流程圖

4.2 Rxjava原理介紹

  • Rxjava原理 基於 一種擴展的觀察者模式.net

  • Rxjava的擴展觀察者模式中有4個角色:code

角色 做用 類比
被觀察者(Observable) 產生事件 顧客
觀察者(Observer) 接收事件,並給出響應動做 廚房
訂閱(Subscribe) 鏈接 被觀察者 & 觀察者 服務員
事件(Event) 被觀察者 & 觀察者 溝通的載體 菜式
  • 具體原理

請結合上述 顧客到飯店吃飯 的生活例子理解: 
示意圖server

流程圖

RxJava原理可總結爲:被觀察者 (Observable) 經過 訂閱(Subscribe) 按順序發送事件 給觀察者 (Observer), 觀察者(Observer) 按順序接收事件 & 做出對應的響應動做。具體以下圖:

示意圖

至此,RxJava原理講解完畢。

5. 基本使用

  • 本文只關注 RxJava的基本使用,更深刻的RxJava使用請繼續關注Carson_Ho的安卓開發筆記
  • Rxjava的使用方式有兩種: 
    1. 分步驟實現:該方法主要爲了深刻說明Rxjava的原理 & 使用,主要用於演示說明
    2. 基於事件流的鏈式調用:主要用於實際使用

5.1 方式1:分步驟實現

5.1.1 使用步驟

示意圖

5.1.2 步驟詳解

步驟1:建立被觀察者 (Observable )& 生產事件

  • 即 顧客入飯店 - 坐下餐桌 - 點菜
  • 具體實現
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

步驟2:建立觀察者 (Observer )並 定義響應事件的行爲

  • 即 開廚房 - 肯定對應菜式
  • 發生的事件類型包括:Next事件、Complete事件 & Error事件。具體以下:

示意圖

  • 具體實現
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

步驟3:經過訂閱(Subscribe)鏈接觀察者和被觀察者

  • 即 顧客找到服務員 - 點菜 - 服務員下單到廚房 - 廚房烹調
  • 具體實現
 
  • 1
  • 2
  • 擴展說明
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.2 方式2:優雅的實現方法 - 基於事件流的鏈式調用

  • 上述的實現方式是爲了說明Rxjava的原理 & 使用
  • 在實際應用中,會將上述步驟&代碼連在一塊兒,從而更加簡潔、更加優雅,即所謂的 RxJava基於事件流的鏈式調用
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

這種 基於事件流的鏈式調用,使得RxJava

  • 邏輯簡潔
  • 實現優雅
  • 使用簡單

更重要的是,隨着程序邏輯的複雜性提升,它依然可以保持簡潔 & 優雅。因此,通常建議使用這種基於事件流的鏈式調用方式實現RxJava

特別注意

RxJava 2.x 提供了多個函數式接口 ,用於實現簡便式的觀察者模式。具體以下: 
示意圖

以 Consumer爲例:實現簡便式的觀察者模式

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6. 實例說明

我將用一個實際工程實例來演示 Rxjava的使用

6.1 方式1:分步驟實現

步驟1:加入依賴

 
  • 1
  • 2

步驟2:直接在MainActivity.java中實現下述步驟 
1. 建立被觀察者 (Observable )& 生產事件 
2. 建立觀察者 (Observer )並 定義響應事件的行爲 
3. 經過訂閱(Subscribe)鏈接觀察者和被觀察者

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 測試結果

示意圖

6.2 方式2:基於事件流的鏈式調用方式

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

7. 額外說明

7.1 觀察者 Observer的subscribe()具有多個重載的方法

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

7.2 可採用 Disposable.dispose() 切斷觀察者 與 被觀察者 之間的鏈接

  • 即觀察者 沒法繼續 接收 被觀察者的事件,但被觀察者仍是能夠繼續發送事件
  • 具體使用
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 效果圖

示意圖

8. 總結

  • 本文主要對 Rxjava 的入門知識進行講解,包括基本介紹、原理 & 具體使用等
  • 接下來,我將持續推出 Android中 Rxjava 2.0 的一系列文章,包括原理、操做符、應用場景、背壓等等 ,有興趣能夠繼續關注Carson_Ho的安卓開發筆記!!

示意圖

相關文章
相關標籤/搜索