RxJava基礎使用(一)
RxJava是什麼?
如果非要用一句話來概括的話,那就是RxJava是一個非同步操作。
RxJava是一個和handler以及AscyTask一樣的可以控制執行緒操作執行緒的一個非同步操作。
既然RxJava和Handler以及AscyTask效果一樣,那為什麼要使用RxJava而不是乾脆直接使用Handler或者AscyTask吶?
這個原因有兩點。
第一,RxJava的操作簡潔。這裡需要說明一下,這裡說的簡潔是指邏輯上的簡潔,並非一些人想象中的少寫很多程式碼那種簡潔。
第二,RxJava擁有一系列強大方便的運算子,可以完成很多以前需要複雜程式碼才能夠完成的操作。這點Handler和AscyTask根本做不到RxJava這麼好。
RxJava採用的是觀察者模式,程式碼結構是一個響應式鏈式程式設計。
什麼是觀察者模式?
舉個例子,警察抓小偷。法律講究後發制人。當一個小偷還沒有偷東西的時候,警察是拿他沒辦法的,但是警察會死死盯著他,一旦他偷了東西便立馬抓獲他。觀察者模式也是如此。
RxJava中,也是採用觀察者模式來設計的。裡面有三個身份,觀察者(Observer)、被觀察者(Observable)、訂閱(Subscribe)。其中觀察者代表警察,被觀察者代表小偷,兩者透過訂閱聯絡在一起。指定了這個警察每天24小時專門觀察這個小偷的一舉一動,如果開始偷東西,便將其抓獲。
例子:
首先新增依賴
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
//被觀察者
Observable observable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
//在這裡可以做一些資料獲取操作,然後將獲取的資料處理之後透過onNext方法發射出去
e.onNext("aaa");
e.onNext("bbb");
e.onNext("ccc");
e.onComplete();
}
});
//觀察者
Observer observer = new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i("結果:" ,s);
Log.i("結果:" ,s);
Log.i("結果:" ,s);
Log.i("結果:" ,s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.i("結束啦","結束啦");
}
};
//繫結
observable.subscribe(observer);
分析上面的程式碼。被觀察者(Observable)透過create()方法建立一個subscribe()方法,裡面有個引數ObservableEmitter,這個可以稱之為發射器,這個發射器有三個方法。onNext()、onComplete()、onError()。
onNext():
向Observe(觀察者) onNext(Object s)方法中發射內容,觀察者拿到這個內容之後可以隨意操作。
onComplete():
當observable(被觀察者)將資料都傳送完成之後就可以使用這個方法,代表結束。observer會在onComplete()中回撥。我們可以將載入dialog的結束動效放在這個裡面
onError():
顧名思義,當出現問題的時候回撥這個方法。
最後透過subscribe產生聯絡,即所謂的訂閱。
一般我們在使用的時候都是採用鏈式結構來使用:
Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
//發射資料
e.onNext("111");
e.onNext("222");
e.onNext("333");
e.onComplete();
}
}).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
//初始化或者載入資料
}
@Override
public void onNext(String s) {
Log.i("接受資料",s);
Log.i("接受資料",s);
Log.i("接受資料",s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.i("接收完成","finish");
}
});
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2808561/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Rxjava2(一)、基礎概念及使用RxJava
- Android RxJava:基礎介紹與使用AndroidRxJava
- 6章 RxJava基礎實戰RxJava
- RxJava 學習筆記 -- 基礎知識RxJava筆記
- DataBinding基礎使用一
- Rxjava 2.x 原始碼系列 - 基礎框架分析RxJava原始碼框架
- Android RxJava:這是一份RxJava使用入門學習指南AndroidRxJava
- 大話RxJava:二、輕鬆學原始碼之基礎篇RxJava原始碼
- web workers簡介(一)基礎使用Web
- Golang 基礎之函式使用 (一)Golang函式
- 如何將WorkManager與RxJava一起使用RxJava
- RxJava小考題 -- Rxjava原始碼分析(一)RxJava原始碼
- 測試基礎(四)Jmeter基礎使用JMeter
- 大話RxJava:三、RxJava的中級使用方法RxJava
- 一、基礎
- jqGrid 基礎使用
- Git基礎使用Git
- Codesys使用基礎
- WebRTC基礎使用Web
- Anaconda基礎使用
- mysql基礎使用MySql
- vim基礎使用
- mongoose基礎使用Go
- Markdown基礎使用
- webpack 基礎使用Web
- RxJava 系列-3:使用 SubjectRxJava
- 2章 RxJava基本使用RxJava
- Spring基礎使用(一)--------IOC、Bean的XML方式SpringBeanXML
- JavaScript 基礎卷(一):基礎語法JavaScript
- 大話RxJava:一、初識RxJava與基本運用RxJava
- 使用RxJava實現快取RxJava快取
- RxJava(RxKotlin)、RxAndroid 簡單使用RxJavaKotlinAndroid
- DataBinding基礎使用二
- DataBinding基礎使用三
- 陣列基礎使用陣列
- mysql索引使用基礎MySql索引
- 廣播基礎使用
- EasyExcel基礎使用教程Excel