RxJava和RxBus如何代替EventBus?
最近在學(xué)習(xí)Rxjava相關(guān)的知識(shí),發(fā)現(xiàn)我們完全可以用Rxjava里面的知識(shí)來代替以前項(xiàng)目中使用的EventBus.
在介紹實(shí)現(xiàn)前,先說說幾點(diǎn)可能會(huì)有疑惑的問題:
首先,明確一下RxBus的概念
? ? ??RxBus 名字看起來像一個(gè)庫,但它并不是一個(gè)庫,而是一種模式,它的思想是使用 RxJava 來實(shí)現(xiàn)了 EventBus ,而讓你不再需要使用OTTO或者 GreenRobot 的EventBus。
其次,為什么要使用RxBus來代替EventBus
? ? ?我之所以想用RxBus來代替EventBus,一是為了自己更加熟悉Rxjava的相關(guān)用法,二是為了減少程序引用的第三方庫(既然都用了Rxjava 沒必要再去引入EventBus)。
當(dāng)然,如果對(duì)Rxjava沒有一點(diǎn)了解,或者說只是想簡單的使用EventBus的功能,建議還是使用Otto或者GreenRobot的EventBus,這二者都可以通過注解非常簡單的使用。
下面是正文:
public class RxBus {
private static RxBus instance;
private Vector
Rxbus代碼如上,使用方式和EventBus一樣,在合適的地方(比如oncreate 或者 onResume)注冊(cè),和取消注冊(cè)(如onPause和onDestroy),在初始化同時(shí),我們可以指定接收后所運(yù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ǔ)上加上注解的方式?來讓實(shí)現(xiàn)更方便,這個(gè)就留著后面再處理了!