RxJava中BehaviorSubject适合的使用场景

本文探讨了在Android中BehaviorSubject如何适用于A页面请求数据后跳转到B页面,仍能接收A页面返回数据的场景。通过三步实现:创建事件发送和订阅类,A页面发送数据事件,B页面订阅并处理数据。使用BehaviorSubject确保B页面无论何时订阅都能接收到数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇大体介绍了RxJava中几种常见的Subject特性

下面我们着重阐述BehaviorSubject在Android中适合的使用场景及其实现方式

场景:A页面正在请求数据D时立马跳到B页面,B页面希望能够接受到A页面发起请求返回的数据

解决方案有多种eg:使用Android 驻留广播机制、EventBus、RxJava。

该篇主要介绍RxJava的具体实现方式
它和前面几种方案都类似,都是在B页面注册广播事件、在数据D回来后立马发送广播(即使注册或者订阅的是在发送广播/事件之后)


第一步:编写一个类,该类负责发送事件和订阅事件

public class MyDataEvent {

    //能够缓存订阅之前的最新数据(如果有)
    private static BehaviorSubject<String> sTotalAssetEvent = BehaviorSubject.create();

    private MyDataEvent() {
    }
    /**
     * 发送事件
     * @param text
     */
    public static void publish(String text) {
        sTotalAssetEvent.onNext(text);
    }


    /**
     * 订阅事件
     * @param action
     * @return
     */
    public static Subscription subscrible(Action1<String> action) {
        return sTotalAssetEvent.subscribe(action);
    }


    /**
     * 反订阅 防止内存泄露
     * @param subscription
     */
    public static void unSubscrble(Subscription subscription) {
        if (subscription != null && !subscription.isUnsubscribed()) {
            subscription.unsubscribe();
            subscription = null;
        }
    }
}

第二步:在A页面请求数据回来后发送数据事件通知

 MyDataEvent.publish("this is a data"+(data++));

第三步:在B页面中订阅事件并对数据做业务逻辑处理

public class BActivity extends Activity {

    private Subscription mSubscription;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        mSubscription = MyDataEvent.subscrible(new Action1<String>() {
            @Override
            public void call(String data) {
                //receive event and process data
                Log.d("dbs", BActivity.class.getSimpleName() + ": " + data);
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        MyDataEvent.unSubscrble(mSubscription);
    }
}

这样无论是数据在进入页面B前到达还是数据在进入页面B之后到达,B页面都会接受到数据,因为此处使用了BehaviorSubject。

效果图
这里写图片描述

附件下载

如果对BehaviorSubject不是很了解可以参看RxJava中常见的几种Subject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值