RxBus
来源:互联网 发布:河西学院网络教学平台 编辑:程序博客网 时间:2024/06/05 07:07
自定义了一个RxBus记录一下,以免以后难得找。记录如下:
package com.han.dlnaplayercontroller.rxbus;import com.trello.rxlifecycle.ActivityEvent;import com.trello.rxlifecycle.FragmentEvent;import com.trello.rxlifecycle.components.ActivityLifecycleProvider;import com.trello.rxlifecycle.components.FragmentLifecycleProvider;import rx.Observable;import rx.Subscription;import rx.functions.Action0;import rx.functions.Action1;import rx.functions.Func1;import rx.subjects.PublishSubject;import rx.subjects.SerializedSubject;import rx.subjects.Subject;import rx.subscriptions.CompositeSubscription;/** * Created by tlh on 2017/1/3. */public class RxBus { private static RxBus instance; //为了防止内存泄露在完成任务后需要进行退订阅操作类,继承自Subscription private static CompositeSubscription mCompositeSubscription; //PublishSubject:源码中你会发现PublishSubjet继承抽象类Subject,Subject而又继承了Observable,实现了Observer //所以可以说PublishSubject既是Observable,又是Observer。意思就是说既可以发送信息又可以接收信息 private final Subject<Object, Object> _bus = new SerializedSubject<>(PublishSubject.<Object>create()); //构造方法私有化 private RxBus() { } //实例化RxBus public static RxBus getInstance() { if (instance == null) synchronized (RxBus.class) { if (instance == null) instance = new RxBus(); mCompositeSubscription = new CompositeSubscription(); } return instance; } //发送事件的 public void send(Object o) { _bus.onNext(o); } private Observable<Object> toObservable() { return _bus; } //判断是否存在订阅关系 private boolean hasObservers() { return _bus.hasObservers(); } //用于接收事件的函数函数,可以过滤掉不想接收的事件 public void receive(Func1<Object, Boolean> func1, Action1<Object> onNext, Action1<Throwable> onError, Action0 onCompleted) { mCompositeSubscription.add(RxBus.getInstance().toObservable().filter(func1).subscribe(onNext, onError == null ? new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); } } : onError, onCompleted)); } //退订阅操作接口方法 public void unsubscribe() { if (instance.hasObservers() && mCompositeSubscription.isUnsubscribed()) mCompositeSubscription.unsubscribe(); } //---------------强大的分割线,下面是Rxjava和Activity以及Fragment生命周期邦定有关的-------------------------// public static SubscriberBuilder with(FragmentLifecycleProvider fragmentLifecycleProvider) { return new SubscriberBuilder(fragmentLifecycleProvider); } public static SubscriberBuilder with(ActivityLifecycleProvider activityLifecycleProvider) { return new SubscriberBuilder(activityLifecycleProvider); } public static class SubscriberBuilder { private FragmentLifecycleProvider mFragLifecycleProvider; private ActivityLifecycleProvider mActLifecycleProvider; private FragmentEvent mFragmentEndEvent; private ActivityEvent mActivityEndEvent; private int what; public SubscriberBuilder(FragmentLifecycleProvider provider) { this.mFragLifecycleProvider = provider; } public SubscriberBuilder(ActivityLifecycleProvider provider) { this.mActLifecycleProvider = provider; } public SubscriberBuilder what(int what) { this.what = what; return this; } public SubscriberBuilder stopEvent(FragmentEvent event) { this.mFragmentEndEvent = event; return this; } public SubscriberBuilder stopEvent(ActivityEvent event) { this.mActivityEndEvent = event; return this; } public Subscription receive(Action1<? super Object> onNext, Action1<Throwable> onError) { if (mFragLifecycleProvider != null) { return RxBus.getInstance().toObservable() .compose(mFragmentEndEvent == null ? mFragLifecycleProvider.<Object>bindToLifecycle() : mFragLifecycleProvider.<Object>bindUntilEvent(mFragmentEndEvent)) // 绑定生命周期 //过滤 根据code判断返回事件 .subscribe(onNext, onError == null ? new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); } } : onError); } if (mActLifecycleProvider != null) { return RxBus.getInstance().toObservable() .compose(mActivityEndEvent == null ? mActLifecycleProvider.<Object>bindToLifecycle() : mActLifecycleProvider.<Object>bindUntilEvent(mActivityEndEvent)) .subscribe(onNext, onError == null ? new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); } } : onError); } return null; } }}
0 0
- RxBus
- RxBus
- RXBUS
- RxBus
- RxBus
- RxBus
- RxBus
- RxBus
- RxBus
- RxBus使用
- Rxbus使用方法
- (九)RxJava:RxBus
- EventBus,RxBus相关介绍
- RxBus 替换EventBus
- EventBus替代品, RxBus.
- Android Rxbus事件总线
- Rxbus事件交互
- RxBus简单实现
- JDBC事务和数据
- oracle显示百分比数据
- redis学习一,Linux下安装redis
- BPM配置故事之案例1-配置简单流程
- Error occurred during initialization of VM; Could not reserve enough space for 1572864KB object heap
- RxBus
- 指向类数据成员的指针
- swift 使用多个storyBoard,进行视图跳转
- redis基础简介(三)- 事务
- Appstore审核被拒-[2. 1 PERFORMANCE: APP COMPLETENESS]
- android加载图像资源大小改变问题
- mql4 EA test
- BPM配置故事之案例2-文本默认值
- MPlayer arm-linux交叉编译