Rxbus介绍和使用

Rxbus的一种写法:


public class RxBus {
    private static final String TAG = RxBus.class.getSimpleName();
    private static RxBus instance;
    public static boolean DEBUG = false;

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

    private RxBus() {
    }

    private ConcurrentHashMap<Object, List<Subject>> subjectMapper = new ConcurrentHashMap<>();

    @SuppressWarnings("unchecked")
    public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) {
        List<Subject> subjectList = subjectMapper.get(tag);
        if (null == subjectList) {
            subjectList = new ArrayList<>();
            subjectMapper.put(tag, subjectList);
        }

        Subject<T, T> subject;
        subjectList.add(subject = PublishSubject.create());
        return subject;
    }

    public void unregister(@NonNull Object tag, @NonNull Observable observable) {
        List<Subject> subjects = subjectMapper.get(tag);
        if (null != subjects) {
            if (observable != null && subjects.contains(observable)) {
                subjects.remove((Subject) observable);
            }

        }
        if ((subjects == null || subjects.size() == 0) && subjectMapper.contains(tag)) {
            subjectMapper.remove(tag);
        }
    }

    public void post(@NonNull Object content) {
        post(content.getClass().getName(), content);
    }

    @SuppressWarnings("unchecked")
    public void post(@NonNull Object tag, @NonNull Object content) {
        List<Subject> subjectList = subjectMapper.get(tag);

        if (subjectList != null && subjectList.size() > 0) {
            for (Subject subject : subjectList) {
                subject.onNext(content);
            }
        }
    }
}

使用:

    private Observable<UserInfo> testObservable;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //注册rxbus
        testObservable= RxBus.get().register("rxbus_test", 
        UserInfo.class);//需要传递的类
        //处理通知
        testObservable.subscribe(new Action1<UserInfo>() {
            @Override
            public void call(UserInfo userInfo) {
                HD.LOG("界面刷新 "+userInfo.getId());
                onRefresh();
            }
        });
    }
    //注销rxbus
    @Override
    public void onDestroy() {
        RxBus.get().unregister("rxbus_test", testObservable);
        super.onDestroy();
    }

//发出通知
RxBus.get().post("rxbus_test",userInfo);//发出一个userInfo对象

//接收通知的Activity
//在生命周期开始的地方注册,在销毁的地方注销rxbus

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值