RxJava 初探
入門教程推薦
**RxJava、Retrofit **
http://www.jianshu.com/p/19cac3c5b106 http://gank.io/post/560e15be2dca930e00da1083 https://gank.io/post/56e80c2c677659311bed9841
**RxJava 操作符 **
http://blog.csdn.net/job_hesc/article/details/46242117
https://www.apkdv.com/rxjava-operator-classification/
**ReactiveX中文翻譯文件(這個特別推薦) **
https://mcxiaoke.gitbooks.io/rxdocs/content/index.html
RxJava的觀察者模式關係
RxJava 有四個基本概念:Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件。Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable 可以在需要的時候發出事件來通知 Observer。
Observer 即觀察者,它決定事件觸發的時候將有怎樣的行為
Observable 即被觀察者,它決定什麼時候觸發事件以及觸發怎樣的事件
eg.
警察 :觀察者小偷 :被觀察者
警察已經在小偷住的房間周圍佈滿了監控,監視著小偷(訂閱),只要小偷作案了(什麼時候觸發,觸發做什麼案件),就會被警察發現,警察就自然會開啟抓捕行動(小偷的作案的事件觸發了他,將會採取抓捕行動)。
大概就這樣。
RxJava 與常規用法簡明對比
假設有這樣一個需求:介面上有一個自定義的檢視 imageCollectorView ,它的作用是顯示多張圖片,並能使用 addImage(Bitmap) 方法來任意增加顯示的圖片。現在需要程式將一個給出的目錄陣列 File[] folders 中每個目錄下的 png 圖片都載入出來並顯示在imageCollectorView 中。需要注意的是,由於讀取圖片的這一過程較為耗時,需要放在後臺執行,而圖片的顯示則必須在 UI 執行緒執行。常用的實現方式有多種,其中一種:
new Thread() {
@Override
public void run() {
super.run();
for (File folder : folders) {
File[] files = folder.listFiles();
for (File file : files) {
if (file.getName().endsWith(".png")) {
final Bitmap bitmap = getBitmapFromFile(file);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
imageCollectorView.addImage(bitmap);
}
});
}
}
}
}
}.start();
而如果使用 RxJava ,實現方式是這樣的:
Observable.from(folders)
.flatMap(new Func1<File, Observable<File>>() {
@Override
public Observable<File> call(File file) {
return Observable.from(file.listFiles());
}
})
.filter(new Func1<File, Boolean>() {
@Override
public Boolean call(File file) {
return file.getName().endsWith(".png");
}
})
.map(new Func1<File, Bitmap>() {
@Override
public Bitmap call(File file) {
return getBitmapFromFile(file);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
imageCollectorView.addImage(bitmap);
}
});
顯然,哪個用的爽,只有自己才知道~
初步使用
新增依賴
//rxjava
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
印表機個字串
public class MainActivity extends Activity {
private final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 建立一個觀察者
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
// TODO Auto-generated method stub
Log.i(TAG, "Completed");
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onError");
}
@Override
public void onNext(String s) {
// TODO Auto-generated method stub
Log.i(TAG, s);
}
};
// 使用Observable.create()建立被觀察者
Observable observable1 = Observable
.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
// TODO Auto-generated method stub
subscriber.onNext("Hello");
subscriber.onNext("Wrold");
subscriber.onCompleted();
}
});
// 訂閱
observable1.subscribe(observer);
}
}
以上用到的都是rx包裡面的,別用錯了!!!
執行結果:這就初步使用到了RxJava
說點什麼吧
最近在學習一些聽了很久,可就只是聽到的時候去搜尋一番的知識,例如Retrofit/RxJava/mvp等等。
這裡只是在學習Rx的時候,我記錄的入門的第一步。接下來會繼續上詳細學習的筆記,和Demo請看下回分解
相關文章
- RxJava原始碼初探RxJava原始碼
- 初探RxJava以及結合Retrofit的使用RxJava
- 響應式程式設計庫RxJava初探程式設計RxJava
- RXJAVARxJava
- RxJava小考題 -- Rxjava原始碼分析(一)RxJava原始碼
- RxJava梳理RxJava
- Retrofit + RxJavaRxJava
- RxJava ,lift()RxJava
- RxJava 知識梳理(1) RxJava 基本思想RxJava
- 淺談RxJavaRxJava
- RxJava之SchedulerRxJava
- RxJava 入門RxJava
- Rxjava基礎RxJava
- Rxjava深入理解之自己動手編寫RxjavaRxJava
- 大話RxJava:一、初識RxJava與基本運用RxJava
- 大話RxJava:三、RxJava的中級使用方法RxJava
- Rxjava1升級到Rxjava2的工作RxJava
- RxJava 沉思錄(一):你認為 RxJava 真的好用嗎?RxJava
- 關於 RxJava 最友好的文章—— RxJava 2.0 全新來襲RxJava
- 擁抱RxJava(番外篇):關於RxJava的Tips & TricksRxJava
- RxJava2與RxJava1的簡單對比RxJava
- Android RxJava使用介紹(二) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(三) RxJava的操作符AndroidRxJava
- Android RxJava使用介紹(四) RxJava的操作符AndroidRxJava
- RxJava 合併操作RxJava
- RxJava_distinct&distinctUntilChangedRxJava
- RxJava使用總結RxJava
- rxjava筆記(1)RxJava筆記
- 當RxJava遇到AOPRxJava
- 徹底搞懂 RxJavaRxJava
- RxJava入門指南RxJava
- RxJava快速入門RxJava
- Deno 初探
- ELK初探
- Nginx 初探Nginx
- Mobx 初探
- jQuery初探jQuery
- 初探IndexedDBIndex