1. 程式人生 > >對於 RxJava2 的 認知與直接應用(一)

對於 RxJava2 的 認知與直接應用(一)

最近有時間學習些許內容,加上重新寫部落格來記錄自己的學習過程與心得

1.rxjava2 認知

rxjava作為知名的響應式程式設計庫,這半年內極大的火爆開發者中
介紹
Observable 被觀察者
|
|
subscribe() 訂閱
|
|
Observer 觀察者

依賴:
compile ‘io.reactivex.rxjava2:rxjava:2.0.5’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’

Observable寫法:以傳送integer為例子

Observable<Integer> observable=Observable.create(new
ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); } });

Observer 寫法:

Observer<Integer> observer=new Observer<Integer>() {
            //自動重寫以下方法
            @Override
            public void onSubscribe(Disposable d) {
                Log.i(TAG, "onSubscribe: ");
            }

            @Override
            public void onNext(Integer integer) {
                Log
.i(TAG, "onNext: "+integer); } @Override public void onError(Throwable e) { Log.i(TAG, "onError: "); } @Override public void onComplete() { Log.i(TAG, "onComplete: "); } };

訂閱事件

 observable.subscribe(observer);

到了這裡就可以很成功的進行,完成一個完整的通路了

最後進行一站式直接操作

Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception 
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
                e.onComplete();
            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.i(TAG, "onSubscribe: ");
            }

            @Override
            public void onNext(Integer integer) {
                Log.i(TAG, "onNext: "+integer);
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG, "onError: ");
            }

            @Override
            public void onComplete() {
                Log.i(TAG, "onComplete: ");
            }
        });

只有subscribe()之後才能進行連通

順便介紹下Consumer
如果你只是想處理接收到的資料可以使用Consumer
程式碼如下

Consumer<Integer> consumer = new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.i(TAG, "accept: " + integer);
            }
        };

訂閱事件是一樣的,observable不變

 observable.subscribe(consumer);

2.rxjava2非同步
rxjava2的非同步處理真心非常棒
主要在於以下方法

.subscribeOn(Schedulers.newThread())//提供將Observable執行在一個新的執行緒中
.observeOn(AndroidSchedulers.mainThread())//提供將Observer執行在主執行緒中

很輕鬆的剝離非主執行緒執行的操作,很方便的對於網路,資料庫,圖片的處理
執行完整執行程式碼如下:
observable,consumer還是上面的那個
像以下程式碼,如果切換兩次執行緒,那麼

observable.subscribeOn(Schedulers.newThread())//在這個執行緒執行
          .subscribeOn(Schedulers.io())//不執行
          .observeOn(AndroidSchedulers.mainThread())//執行
          .observeOn(Schedulers.io())//切換到這個執行緒
          .subscribe(consumer);
          //這裡我們就可以靈活應用

rxjava2的內建執行緒,四種:
—Schedulers.io() :io操作的執行緒, 通常用於網路請求,讀寫檔案
—Schedulers.computation():需要大量計算的操作
—Schedulers.newThread() :常規的新執行緒
—AndroidSchedulers.mainThread() :Android的主執行緒

相關推薦

對於 RxJava2認知直接應用

最近有時間學習些許內容,加上重新寫部落格來記錄自己的學習過程與心得 1.rxjava2 認知 rxjava作為知名的響應式程式設計庫,這半年內極大的火爆開發者中 介紹 Observable 被觀察者 | | subscribe(

Spring Boot Actuator詳解深入應用:Actuator 1.x

《Spring Boot Actuator詳解與深入應用》預計包括三篇,第一篇重點講Spring Boot Actuator 1.x的應用與定製端點;第二篇將會對比Spring Boot Actuator 2.x 與1.x的區別,以及應用和定製2.x的端點;第三篇將會介紹Actuator metric指

ArcGIS for Android 100.3的學習應用 如何繪製點和線?

平時工作中,我們接觸到的地圖類開發平臺有很多,最常用的有高德,百度,騰訊地圖。而且它們都有自己的開發者平臺和文件供我們使用。基本能滿足我們的業務需求。 由於公司裡的專案會涉及一些地圖資料統計和展示方面的需求,同時也會發布一些地圖服務,所以選擇了使用在地圖方面比較牛逼的ArcGIS。 把平時遇

Android ArcGIS的學習應用 如何繪製點和線?

平時工作中,我們接觸到的地圖類開發平臺有很多,最常用的有高德,百度,騰訊地圖。而且它們都有自己的開發者平臺和文件供我們使用。基本能滿足我們的業務需求。 由於公司裡的專案會涉及一些地圖資料統計和展示方面的需求,同時也會發布一些地圖服務,所以選擇了使用在地圖方面比較

卷積神經網路簡單的應用:目的資料

目的構建一個卷積神經網路對性別以及美麗程度(beautiful or handsome)進行識別。資料準備模型中採用的資料來自百度搜索資料,為了效率可採用爬蟲(大家可以在以下相關程式碼上進行更改):http://blog.sina.com.cn/s/blog_13927ddb50102w2m1.html,下圖

阿里雲播放器SDK的正確開啟方式 | 功能、架構應用

阿里雲播放器SDK(ApsaraVideo for Player SDK)是阿里視訊雲端到雲到端服務的重要一環,除了支援點播和直播的基礎播放功能外,還深度融合視訊雲業務,支援視訊的加密播放、安全下載、首屏秒開、低延時等業務場景,為使用者提供簡單、快速、安全、穩定的視訊播放

PyQt訊號槽之訊號槽的入門應用

前言 訊號與槽有三種使用方法 第一種:內建訊號與槽的使用 第二種:自定義訊號與槽的使用 第三種:裝飾器的訊號與槽的使用 一: 內建訊號與槽的使用 內建訊號與槽的使用,是指在發射訊號時,使用視窗控制元件的函式,而不是自定義的函式,這種也是我們前

馬爾科夫隨機場Markov Random Field的概念應用

          工作緣故,時常需要閱讀些許文獻,而在影象處理中關於概率、分割、聚類、求優類等類問題上,十有八九會和隨機扯上關係,不是條件隨機場(Conditional Random Field,

Redis在三層服務框架中應用——RedisModel的結合

個人宣告:本系列所有文章旨在拋磚引玉,為有興趣深入使用Redis的同學提供一些參考。本系列所有文章純屬原創,均是筆者在實際工作中的總結。本文所有引用的MDB系列元件均由米多網路架構部提供,在此向架構部表示感謝。筆者經驗能力有限,如有不適之處還請多多指教。一、為什麼要使用Red

TF-IDF餘弦相似性的應用:自動提取關鍵詞

有一篇很長的文章,我要用計算機提取它的關鍵詞(Automatic Keyphrase extraction),完全不加以人工干預,請問怎樣才能正確做到?這個問題涉及到資料探勘、文字處理、資訊檢索等很多計算機前沿領域,但是出乎意料的是,有一個非常簡單的經典演算法,可以給出令人相當滿意的結果。它簡單到都不需要高等

C# QueueRabbitMQ的愛恨情仇文末附原始碼:QMQ訊息佇列簡單應用

首先我們簡單瞭解一下什麼堆、棧、佇列。 堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。 棧就是一個容器,後放進去的先拿出來,它下面本來有的東西要等它出來之後才能出來。(先進後出or後進先出) 佇列只能在隊頭做刪除操作,在隊尾做插入操作.

Storm概念、原理詳解及其應用BaseStorm

when 結構 tails 並發數 vm 虛擬機 cif 異步 優勢 name 本文借鑒官文,添加了一些解釋和看法,其中有些理解,寫的比較粗糙,有問題的地方希望大家指出。寫這篇文章,是想把一些官文和資料中基礎、重點拿出來,能總結出便於大家理解的話語。與大多數“wordc

WCF學習——構建一個簡單的WCF應用

frame port app 位置 協定 enc splay msdn ons 本文的WCF服務應用功能很簡單,卻涵蓋了一個完整WCF應用的基本結構。希望本文能對那些準備開始學習WCF的初學者提供一些幫助。 在這個例子中,我們將實現一個簡單的計算器和傳統的分布式通信框架一樣

vuex實踐之路——筆記本應用

time 中大 -- this 隔離 思想 一個表 環境搭建 一定的 首先使用vue-cli把環境搭建好。 介紹一下應用的界面。 App.vue根組件,就是整個應用的最外層 Toolbar.vue:最左邊紅色的區域,包括三個按鈕,添加、收藏、刪除。 NoteList.vu

OPENCV----在APP性能測試中的應用

核心 color frame pan ems span urn sqrt || 應用項目: APP的性能測試 應用場景: APP啟動速度 視頻開播速度 加載速度 等~~ 緣來: 基於APP日誌和UiAutomator的測試方案,測試結果不能直白且精確的

活動目錄的綜合應用

windows 侯良金 活動 一、活動目錄相關概念1、使用活動目錄的優點:集中管理、便捷的訪問網絡資源、可擴展性。2、域的概念:活動目錄的一種實現形式,也是活動目錄最核心的管理單位。3、域控制器:就是安裝了活動目錄服務的一臺計算機。活動目錄的數據都儲存在域控制器內!4、名稱空間:是一個區域的名字,

java內存管理GC機制

大於 一個棧 es2017 記錄 高速 工作 限制 fin 不存在 計算機cpu運轉速度越來越快,硬盤遠遠跟不上cpu的讀寫速度,就設計可內存。隨著cpu的發展,內存的讀寫速度也跟不上cpu處理速度,就在每顆cpu上加入了高速緩存。在多處理器系統中,每個處理

[神經網絡深度學習]使用神經網絡識別手寫數字

線性 部分 logs 結構 這一 可用 調整 重復 http 1.1 感知器 感知器的輸出為: wj為權重,表示相應輸入對輸出的重要性; threshold為閾值,決定神經元的輸出為0或1。 也可用下式表示: 其中b=-threshold,稱為感知器的偏置

java中的棧Stack的基本使用和應用

string emp tac logs tor str col () bject 棧 定義  棧是一種只能在一端進行插入或刪除操作的線性表。(先進後出表) java中的Stack繼承Vector 實例化 Stack stack=new Stack(); 基本使用 判斷是

Charles的基本操作方法python基礎

inpu 格式 format log text src 基礎 pos -s 開始與結束按鈕: 斷點按鈕: 清空按鈕: 若抓不到包可嘗試更改瀏覽器重新請求 python基礎(一) 計算機語言分為編譯型語言和解釋型語言,編譯型語言需要提前編譯,然後直接拿來運行,但解釋型語