+MVP?+Dragger?
先暫且不說Dragger注解+MVP 模式悦即。
什么是RxJava?直接上資料
官網(wǎng):http://reactivex.io/ 這里幾乎能找到目前流行的編程語言的基礎(chǔ)語法逼裆。
RxJava核心模式設(shè)計
鏈?zhǔn)骄幊逃羯裕憫?yīng)式編程是RxJava 設(shè)計的初衷,核心設(shè)計模式是觀察者模式胜宇。
先來看看設(shè)計模式中的觀察者模式耀怜,是如何設(shè)計的。
這是一個很經(jīng)典的觀察者模式的類圖桐愉。
1.接口Subject, 簡單的說是包含了被觀察者需要 “做哪些事情”的一個抽象财破。
2.ConceteSubject類,是對Subject的一個實現(xiàn)从诲,是一個真正被觀察者對象(我稱之為干活的人)左痢。
3.接口Watcher,是觀察者(監(jiān)視干活的人)的一系列動作抽象系洛。
4.ConcreteWatcher,是觀察者接口的實現(xiàn)俊性,以及額外擴(kuò)展的一系列動作。
那么有了上面的幾種角色分工描扯。那他們怎么實現(xiàn)訂閱干活呢
<pre>
1.Subject subject = new ConcreteSubject();//得到一個干活的人定页。
2.Watcher watcher = new ConcreteWatcher();//得到一個監(jiān)視干活的人绽诚。
3.subject.addWatcher(watcher);//干活的人訂閱監(jiān)工
4.subject.notifyWatcher();//干活的人通知我干完了活兒典徊。監(jiān)工可以去干其他活兒了。
</pre>
簡單的看了一下觀察者模式如何實現(xiàn)角色分配和關(guān)系訂閱憔购。這里由(被觀察者)干活兒的人主動的去告知監(jiān)工(觀察者)活兒干完的方式宫峦,有利于系統(tǒng)性能的提升,優(yōu)于觀察者定時得去獲取工人的狀態(tài)玫鸟。
<code>
題外話导绷,這個設(shè)計模式進(jìn)一步看,可以運(yùn)用到公司管理屎飘。
學(xué)好觀察者模式妥曲,在公司管理上贾费,以及效率提升會有很大的幫助。那么簡單的再進(jìn)行描述一下檐盟,接口是什么褂萧。接口就是機(jī)制,公司制度葵萎。那么執(zhí)行到員工身上导犹,則變成策略。員工怎么做怎么實現(xiàn)羡忘,這個上層的領(lǐng)導(dǎo)不用管谎痢。只需告訴我有沒有完成活兒,上層領(lǐng)導(dǎo)好去做起其他事情卷雕。領(lǐng)導(dǎo)不那么累节猿,員工也在機(jī)制內(nèi),把控有度漫雕。
</code>
細(xì)說RxJava
正式進(jìn)入正題了1踔觥!
從RxJava1.0 說起浸间。
先熟悉幾種角色太雨。
<pre>
1.Observable. 被觀察者(說的fashion一點(diǎn)就是搬磚的)
2.Observer.觀察者(監(jiān)工),這個抽象類由Subscriber繼承了发框。作用差不多
3.obeservable.subscriber(observer).訂閱事件(監(jiān)工和搬磚的簽訂勞務(wù)合同)
</pre>
以上是必須Rxjava實現(xiàn)的標(biāo)配躺彬。既然合同都簽訂了,那接下來是不是需要干活了梅惯。
當(dāng)然宪拥,老板不可能養(yǎng)閑人(除少數(shù)G企外)。
那開始干活吧铣减。干活的方式有很多種她君。不同的工作車間 (多線程),不同的操作方式(Rx操作符)等等葫哗。那么公司的規(guī)定的制度是什么缔刹?也就是抽象出來的接口。Rxjava提供了3種方法
1.onNext();//想監(jiān)工發(fā)出通知劣针。
2.onComplete();//與onError互斥校镐,順利干完活兒則必走此方法。
3.onError();//與onComplete互斥捺典,干活過程中發(fā)生異常鸟廓,不發(fā)送通知給監(jiān)工,也不走onComplete。
4.onStart();//由Subscriber類擴(kuò)展而來引谜。在訂閱時做一些前期準(zhǔn)備牍陌。
最簡單的干活方式。3步驟
<code>
//1.創(chuàng)建被觀察者
Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub)
{
sub.onNext("Hello, world!");
sub.onCompleted();
}
});
//2.創(chuàng)建觀察者
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
};
//3.訂閱
myObservable.subscribe(muSubscriber);
</code>
那么問題來了员咽,在一個打車間干活毒涧。突然斷電或者出現(xiàn)其他事故,工廠需要立馬停止所有工作該怎么辦了贝室。(尼瑪契讲,停電了。不用寫代碼了5挡!;巢础!握草误趴,停電了,勞資設(shè)計圖稿沒保存务傲。)
Rxjava 的設(shè)計者肯定會想到這樣的問題凉当,于是出現(xiàn)了Subscription 接口。
unsubscribe();//取消訂閱售葡。
isUnsubscribed();//是否被訂閱看杭。
Subscriber 實現(xiàn)了Subscription接口,用于取消訂閱挟伙。
上面的上個步驟是最簡單的楼雹,也是最直接的最完整的創(chuàng)建方式。
多線程操作
一個工廠肯定是擁有多車間的尖阔,那么如何進(jìn)行車間切換通信呢贮缅。
subscribeOn(指定線程區(qū)別).指定搬磚工在某一個線程干活。
observeOn(指定線程).干完活切換到某一個線程介却。
例子:監(jiān)工在一個車間的辦公室干活(MainThread)谴供,搬磚工(也就是我們這些搬磚寫代碼的)在一個另一個車間干活(OtherThread)。
subscribeOn(OtherThread).observeOn(MainThread)
其中Rxjava,自定義了幾種線程模式齿坷。
- Schedulers 幾種模式
- SINGLE;單列線程
- COMPUTATION; 使用的固定的線程池桂肌,大小為 CPU 核數(shù)
- IO;一個無數(shù)量上限的線程池,可以重用空閑的線程
- TRAMPOLINE;排隊
- NEW_THREAD; 創(chuàng)建新線程
- AndroidSchedulers.mainThread() 指定運(yùn)行在 Android主線程
操作符
操作符就是我上面提到的策略永淌,干活的方式崎场。(一般由搬磚的人總結(jié)出來的經(jīng)驗,當(dāng)然能夠總結(jié)這些自然會成為領(lǐng)導(dǎo)遂蛀。)
1.create谭跨,創(chuàng)建一個Obervable
2.just,創(chuàng)建一個Obervable 同時,將集合對象一次發(fā)送給Observer
3.map饺蚊,轉(zhuǎn)換萍诱,將數(shù)據(jù)對象轉(zhuǎn)換成指定的方式,返回一個Obervable
4.timer污呼,定時任務(wù)裕坊。
5.takeFirst,和take 差不多燕酷,取不到不會報異常籍凝。
6.takeLast,從后面開始苗缩。
7.take饵蒂,取n個數(shù)據(jù)的 前面第m個數(shù)據(jù)take(m)
.....
等等...具體請看。
點(diǎn)擊這里酱讶,這里總結(jié)的比我好太多