• rxjava取代eventbus


    RxJava有多火?看看Github上star数量就知道了,那什么是RxJava呢?

    RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准。

    换一种说法,RxJava 是一个响应式编程框架,采用观察者设计模式。所以自然少不了 Observable 和 Subscriber 这两个东东了。

    而针对Android,则有一个基于RxJava的RxAndroid

    甚至Jake Wharton大神还基于RxJava写了一个针对Android平台的binding apiRxBinding

    而这篇博文讲的就是基于RxJava实现的一个Event Bus->RxBus

    懂得Android的开发者都知道,目前Android上最火的两个Event Bus库是Otto和Green Robot’sEventBus,两个事件总线库写的都非常不错。不过这里不是讲事件总线,而是讲如何通过RxJava来实现事件总线的效果。

    总体来说,代码非常的简单,十几行代码就搞定了!

    首先,我们来定义一个RxBus单例类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import rx.Observable;
    import rx.subjects.PublishSubject;
    import rx.subjects.SerializedSubject;
    import rx.subjects.Subject;

    /**
    * Created by HanHailong on 15/10/9.
    */
    public class RxBus {

    private static volatile RxBus mDefaultInstance;

    private RxBus() {
    }

    public static RxBus getDefault() {
    if (mDefaultInstance == null) {
    synchronized (RxBus.class) {
    if (mDefaultInstance == null) {
    mDefaultInstance = new RxBus();
    }
    }
    }
    return mDefaultInstance;
    }

    private final Subject<Object, Object> _bus = new SerializedSubject<>(PublishSubject.create());

    public void send(Object o) {
    _bus.onNext(o);
    }

    public Observable<Object> toObservable() {
    return _bus;
    }
    }

    代码非常的简单,使用呢?则更简单了,一般来讲,事件总线,包括一个发送事件和多个接收事件。

    先看发送事件的代码:

    1
    RxBus.getDefault().send(new TapEvent());

    而在你想接收事件的地方,只需要加上下面代码就可以了:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    RxBus.getDefault().toObservable().subscribe(new Action1<Object>() {
    @Override
    public void call(Object event) {
    if (event instanceof TapEvent) {
    //do something
    }else if(event instanceof otherEvent){
    //do otherthing
    }
    }
    });

    这样,一个简单的Event Bus就实现了!如果你的项目已经开始使用RxJava,建议可以把Otto和Green Robot’sEventBus去掉了,直接使用RxBus!!

    当然,不要忘了在build.gradle引入RxJava和RxAndroid:

    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'io.reactivex:rxjava:1.0.14'
    

     

     
  • 相关阅读:
    让IE6/IE7/IE8支持HTML5标签的js代码
    你应该抓紧学习Python,它是开发Web应用最强大的语言
    细数IE6的一串串的恼人bug,附加解决方法!
    邪恶的编码:复制与粘帖
    谈谈微信公众平台开发
    jQuery练手:仿新浪微博图片文字列表淡进淡出上下滚动效果
    DIV-CSS布局中position属性详解
    解决java编译错误:编码GBK的不可映射字符
    离线下载安装 NLTK 的 nltk_data 模块
    Python NLTK 自然语言处理入门与例程(转)
  • 原文地址:https://www.cnblogs.com/visuals/p/5292519.html
Copyright © 2020-2023  润新知