對於 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在三層服務框架中應用(一)——Redis與Model的結合
個人宣告:本系列所有文章旨在拋磚引玉,為有興趣深入使用Redis的同學提供一些參考。本系列所有文章純屬原創,均是筆者在實際工作中的總結。本文所有引用的MDB系列元件均由米多網路架構部提供,在此向架構部表示感謝。筆者經驗能力有限,如有不適之處還請多多指教。一、為什麼要使用Red
TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞
有一篇很長的文章,我要用計算機提取它的關鍵詞(Automatic Keyphrase extraction),完全不加以人工干預,請問怎樣才能正確做到?這個問題涉及到資料探勘、文字處理、資訊檢索等很多計算機前沿領域,但是出乎意料的是,有一個非常簡單的經典演算法,可以給出令人相當滿意的結果。它簡單到都不需要高等
C# Queue與RabbitMQ的愛恨情仇(文末附原始碼):Q與MQ訊息佇列簡單應用(一)
首先我們簡單瞭解一下什麼堆、棧、佇列。 堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。 棧就是一個容器,後放進去的先拿出來,它下面本來有的東西要等它出來之後才能出來。(先進後出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基礎(一) 計算機語言分為編譯型語言和解釋型語言,編譯型語言需要提前編譯,然後直接拿來運行,但解釋型語