前言
優秀文章推薦
基礎知識
掌握 Java 8 Lambda 表達式
http://geek.csdn.net/user/publishlist/icess
http://blog.chinaunix.net/uid-20771867-id-5187376.html
http://akarnokd.blogspot.hu/2015/05/operator-concurrency-primitives_86.html
http://blog.danlew.net/2015/07/23/deferring-observable-code-until-subscription-in-rxjava/
其實最好的學習方法,還是閱讀源碼,RTFSC你懂得!!!
這裏推薦一個Demo:
https://github.com/Chaoba/RxJavaDemo推薦這個demo,並不是因爲它很牛X,而是因爲它對Rxjava的演示比較全面。裏面有一些瑕疵,你可以舉一反三的修正過來!當然,clone下來代碼後,不僅要看,還要不斷的修改測試,達到深入理解的目的!Rxjava的大多數優秀的教程都是英文版的,對於英文不是很好的童鞋,RTFSC是很好的快速的學習Rxjava的方式。
使用RxAndroid的一點體會
最近一個項目,引用了一個第三方的支付,需要向該支付傳一個回調,我在回調裏做了一些處理。但是就奇了怪了吐司總是吐不出,Ui(Dialog無法取消),很無奈啊。。。最後才搞明白,這個回調是在子線程中執行的。你說,生氣不生氣?無奈的很,不得不創建一個handler,例如:
Handler handler = new Handler(context.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}
最後再在這個回調裏面發送handler消息。不過加入有了RxJava,又會是怎樣的一種場景呢?
在回調裏面只需執行,同時你也不用擔心該回調在哪個線程執行:
Observable.just(arg0).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_SHORT).show();
}
});
是不是很霸氣的感覺?如果用上java8支持的Lambda變成界面更加清爽。不是說RxJava具有其他知識無法完成的工作,只是說它提高了開發的效率。這一點很贊!
怎樣學習Rxjava
對於Reactive 的學習,主要的是對其思想的理解,其次重點是其操作符的學習。對其思想的理解,只能軟磨硬泡,不是短期就能促成的,對操作符的理解,重點在於實踐。
關於操作符的官方文檔
對於你應該選擇什麼樣的操作符,這裏翻譯一下官方的文檔,我覺得寫得比較不錯:
主要的操作符學習
先來表述一下用於描述操作符的圖:
用於創建Observable的操作符
*create:創建一個新的Observable,並會擦除數據流之前的數據。
例如:你使用just創建了一個Observable之後又鏈式調用create這是just的數據流會被擦除。
range操作符:用於創建數據流爲一個範圍的Observable例如:
Observable.range(10, 5);//這是數據流爲10,11,12,13,14,用於返回一段連續的整數
just:其實質還是調用from的迭代創建Observable;
defer相對於just,defer會爲每一個訂閱者創建一個全新的Observable,且在被訂閱後纔會爲其創建Observable。這是一個很實用的操作符。一個經典案例:Deferring Observable code until subscription in RxJava
repeat:重複Observable的item並返回
形象圖:
Observable的衍生品Single
相比於Observable處理的onNext,onError,onComplete,Single就相對的簡單了一些,只有onSuccess()和onError()
Observable線程規劃者Scheduler
Observable可以通過Scheduler自由的切換線程。你可以自定義線程,也可以使用Schedulers預先定義好的幾個線程,例如INSTANCE.ioScheduler
,TestScheduler
,INSTANCE.computationScheduler
,另外RxAndroid還特別提供了AndroidSchedulers.mainThread()
。對於Observable創建的過程的線程可以通過subscribeOn()進行指定,可以通過observeOn()來指定操作符發送消息的進程。官方給出的圖解:
關於上圖的說明:
其中subscribeOn可以出現在鏈式表達式的任何地方,用於制定Observable的創建過程。而observeOn指定了下一個操作符執行的線程。如果某一個操作符沒有指定線程,則默認向前尋找。
其中①是Observable的創建過程,由subscribeOn指定。而②的線程由第1個observeOn指定。由於沒有對③進行指定,因此默認向前尋找,即在同線程②。④同③。而⑤由第2個observeOn指定。
——————————————————-
文章有點亂,待整理完善!!!
未完待續……