RxJava和RxBus如何代替EventBus?
最近在學(xué)習(xí)Rxjava相關(guān)的知識(shí),發(fā)現(xiàn)我們完全可以用Rxjava里面的知識(shí)來(lái)代替以前項(xiàng)目中使用的EventBus.
在介紹實(shí)現(xiàn)前,先說(shuō)說(shuō)幾點(diǎn)可能會(huì)有疑惑的問(wèn)題:
首先,明確一下RxBus的概念
? ? ??RxBus 名字看起來(lái)像一個(gè)庫(kù),但它并不是一個(gè)庫(kù),而是一種模式,它的思想是使用 RxJava 來(lái)實(shí)現(xiàn)了 EventBus ,而讓你不再需要使用OTTO或者 GreenRobot 的EventBus。
其次,為什么要使用RxBus來(lái)代替EventBus
? ? ?我之所以想用RxBus來(lái)代替EventBus,一是為了自己更加熟悉Rxjava的相關(guān)用法,二是為了減少程序引用的第三方庫(kù)(既然都用了Rxjava 沒(méi)必要再去引入EventBus)。
當(dāng)然,如果對(duì)Rxjava沒(méi)有一點(diǎn)了解,或者說(shuō)只是想簡(jiǎn)單的使用EventBus的功能,建議還是使用Otto或者GreenRobot的EventBus,這二者都可以通過(guò)注解非常簡(jiǎn)單的使用。
下面是正文:
public class RxBus {
private static RxBus instance;
private Vector
Rxbus代碼如上,使用方式和EventBus一樣,在合適的地方(比如oncreate 或者 onResume)注冊(cè),和取消注冊(cè)(如onPause和onDestroy),在初始化同時(shí),我們可以指定接收后所運(yùn)行的線(xiàn)程等其他操作
Observableobservable?=?RxBus.getInstance().register(this); observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new?Action1()?{ ????@Override ????public?void?call(UserBean?userBean)?{ ????????Log.d("Test",?"received?:"?+?userBean.toString()); ????} });
RxBus.getInstance().unregister(this);
發(fā)送事件的方式:
RxBus.getInstance().post(new?UserBean("rxbus",?99));
當(dāng)然我們還可以在這個(gè)的基礎(chǔ)上加上注解的方式?來(lái)讓實(shí)現(xiàn)更方便,這個(gè)就留著后面再處理了!