RxJava初探

前言

優秀文章推薦

深入淺出RxJava(一:基礎篇)

基礎知識

掌握 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指定。

——————————————————-

文章有點亂,待整理完善!!!
未完待續……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章