Rxjava3.x 实现ReBus

注:app文件夹内的build.gradle 的 dependencies 添加rxjava 库

implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

1.创建Rxbus

首先创建RxBus ,这里的RxBus仅支持基本的功能。如下示例



import androidx.lifecycle.Observer;

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.subjects.Subject;

public class Rxbus {
    private final Subject<Object> subject;
    private static volatile Rxbus rxbus;

    private Rxbus() {
        this.subject = PublishSubject.create().toSerialized();
    }

    public static Rxbus getInstance(){
        if (rxbus == null){
            synchronized (Rxbus.class){
                rxbus = new Rxbus();
            }
        }

        return rxbus;
    }

    public void post(Object ob){
        subject.onNext(ob);
    }

    public <T> Observable<T> toObservable(Class<T> eventType){
        return subject.ofType(eventType);
    }
}

2.新建发送的事件类

public class MessageEvent {
    private String message;

    public String getMessage() {
        return message;
    }

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

3.订阅事件及接收和处理

        Rxbus.getInstance().toObservable(MessageEvent.class).subscribe(new Observer<MessageEvent>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                用于在Activity 注销时进行取消订阅事件,防止内存泄漏
                compositeDisposable.add(d);
            }

            @Override
            public void onNext(@NonNull MessageEvent messageEvent) {
                if (messageEvent != null){
                    Log.e("TAG", "onNext: " + messageEvent.getMessage());
                }
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

compositeDisposable 实例化方式:

compositeDisposable = new CompositeDisposable();

4.发送事件

Rxbus.getInstance().post(new MessageEvent("Rxjava 事件"));

5 Activity 销毁时,进行取消订阅

    @Override
    protected void onDestroy() {
        if (compositeDisposable != null){
            compositeDisposable.clear();
        }
        super.onDestroy();
    }

以上就是Rxjava3.x 使用RxBus 实现订阅和事件处理的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在IDEA的java代码<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="admin" type="com.entil.Admin"/> <typeAlias alias="users" type="com.entity.Users" /> <typeAlias alias="banner" type="com.entity.Banner" /> <typeAlias alias="article" type="com.entity.Article" /> <typeAlias alias="programs" type="com.entity.Programs" /> <typeAlias alias="house" type="com.entity.House" /> <typeAlias alias="money" type="com.entity.Money" /> <typeAlias alias="pays" type="com.entity.Pays" /> <typeAlias alias="serves" type="com.entity.Servs" /> <typeAlias alias="orders" type="com.entity.Orders" /> <typeAlias alias="broken" type="com.entity.Broken" /> <typeAlias alias="complains" type="com.entity.Complains" /> <typeAlias alias="bbs" type="com.entity.Bbs" /> <typeAlias alias="rebus" type="com.entity.Rebbs" /> </typeAliases> <mappers> <mapper resource="mapper/admin.xml" /> <mapper resource="mapper/users.xml" /> <mapper resource="mapper/banner.xml" /> <mapper resource="mapper/article.xml" /> <mapper resource="mapper/programs.xml" /> <mapper resource="mapper/house.xml" /> <mapper resource="mapper/money.xml" /> <mapper resource="mapper/pays.xml" /> <mapper resource="mapper/serves.xml" /> <mapper resource="mapper/orders.xml" /> <mapper resource="mapper/broken.xml" /> <mapper resource="mapper/complains.xml" /> <mapper resource="mapper/bbs.xml" /> <mapper resource="mapper/rebus.xml" /> </mappers> </configuration>你怎么看
最新发布
04-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值