我的极客虫blog

The only easy day was yesterday.

  • 首页
  • 归档

  • 搜索
RxJava 内存 GreenDAO Tools Mac 设计模式 Gradle Java Life Android Studio WebView SDK Service 规范 Android

RxBus

发表于 2016-08-22 | 分类于 技.技术研究 | 0 | 阅读次数 94

之前项目用的是EventBus,最近项目开始用RxJava去替换些复杂的逻辑操作,所以可以用RxBus来替代EventBus,这样可以省去库的依赖,减小apk的大小。

RxJava

此篇需要有RxJava的基础,关于RxJava,可以看扔物线的给 Android 开发者的 RxJava 详解.

RxBus

若对于RxJava有些了解,其RxBus的简单代码如下:

public class RxBus {

    private volatile static RxBus instance;
    private final Subject bus;

    public RxBus() {
        bus = new SerializedSubject<>(PublishSubject.create());
    }

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

    //提供一个事件传递
    public void post(Object o) {
        bus.onNext(o);
    }

    // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
    public <T> Observable<T> toObserverable(Class<T> eventType) {
        return bus.ofType(eventType);
    }
}

使用方式

发送事件的代码:

RxBus.getInstance().post(new Event(0));

Event是要发送的事件:

public class Event {

    private String message;
    private int flag;

    public Event(String message) {
        this.message = message;
    }

    public Event(int flag) {
        this.flag = flag;
    }

    public Event(String message, int flag) {
        this.message = message;
        this.flag = flag;
    }

    public String getMessage() {
        return message;
    }

    public int getFlag() {
        return flag;
    }
}

接收事件的代码:

// rxSubscription是一个Subscription的全局变量,这段代码可以在onCreate/onStart等生命周期内
rxSubscription = RxBus.getDefault().toObserverable(Event.class)
        .subscribe(new Action1<UserEvent>() {
               @Override
               public void call(Event event) {
                 
                   String message = event.getMessage();
                   ...
               }
           },
        new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // TODO: 处理异常
            }        
        });

最后

一定要记得在生命周期结束的地方取消订阅事件,防止RxJava可能会引起的内存泄漏问题。

@Override
protected void onDestroy() {
    super.onDestroy();
    if(!rxSubscription.isUnsubscribed()) {
        rxSubscription.unsubscribe();
    }
}
如果这篇文章对您有很大帮助,你可以扫描下面的二维码,让我喝一杯咖啡。非常感谢您的捐赠。谢谢!
F1ReKing 微信支付

微信支付

F1ReKing 支付宝

支付宝

  • 本文作者: F1ReKing
  • 本文链接: https://geekbug.xyz/archives/2019120223150984581
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# RxJava # 内存 # GreenDAO # Tools # Mac # 设计模式 # Gradle # Java # Life # Android Studio # WebView # SDK # Service # 规范 # Android
Google Java编程风格指南中文版
我的Gradle配置
  • 文章目录
  • 站点概览
F1ReKing

F1ReKing

34 日志
8 分类
15 标签
RSS
Github E-mail Twitter
Creative Commons
Links
  • Android开发者
0%
© 2014 — 2021 F1ReKing
The only easy day was yesterday.
闽ICP备20002060号