RXJava入门总结以及简易Demo

2 篇文章 0 订阅
1 篇文章 0 订阅

Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎

在android开发框架中:RxJava+Retrofit+MVP+Dagger2(主流框架)中Rxjava是对网络连接处理和图片加载处理非常好用的异步操作方法,类似于Android中的AysncTask、Handler

Rxjava的模式类似于Java的观察者模式

被观察者:Observable

观察者:Observer

通过订阅来关联观察者和被观察者:Subscribe

然后我觉得比较重要在线程切换方面的两个方法的区别:

ObserveOn

指定一个观察者在哪个调度器上观察这个Observable

SubscribeOn

指定Observable自身在哪个调度器上执行

补充:对事件总线有理解的的,还可以去查看一下RxBus来看一下Rxjava的事件总线处理机制

下面通过一个demo来简易介绍Rxjava怎么使用:

开发的IDE是android studio ,如果你是eclipse请点右上角的X

build.grade(app)中添加依赖:

implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

第一个Demo是将被观察者和观察者和订阅都分开写。

创建被观察者:

 Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
                e.onNext(4);//要发送的事件
            }
        });//创建被观察者

创建观察者

 
  Observer<Integer> observer = new Observer<Integer>() {
            private Disposable mDisposable;
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "开始采用subscribe连接");
                mDisposable = d;
            }

            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "对Next事件" + value + "作出相应");
                if(value == 2){
                    mDisposable.dispose();
                    Log.d(TAG,"已经断开连接:"+mDisposable.isDisposed());
                }
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "对Error事件作出响应");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "对Complete事件作出响应");
            }
        };

补充:代码中有一行这个代码解释一下

 
            private Disposable mDisposable;

这个代码是订阅者和被订阅者的关系断开的一个控制变量。

取消订阅:

mDisposable.dispose();
取消订阅后,观察者就无法在接受被观察者发来的信息了

将被观察者和观察者通过订阅关系绑定

observable.subscribe(observer);

但是上面的代码,从字面上理解是被观察者订阅观察者,从字面上理解有问题,其实从机制上来说没问题,我个人的理解就是观察者相当于一个接收器,而被观察者是发起消息的发送器,发送器来绑定一个接受器这样的逻辑,如果不对,还请多多指教。

下面是Rxjava典型的链式结构:

Observable.create(new ObservableOnSubscribe<Integer>() {
           @Override
           public void subscribe(ObservableEmitter<Integer> e) throws Exception {
               e.onNext(1);
               e.onNext(2);
               e.onNext(3);
               e.onNext(4);
           }
       }).subscribe(new Observer<Integer>() {
           @Override
           public void onSubscribe(Disposable d) {
               Log.d(TAG,"开始采用subscribe连接");
           }

           @Override
           public void onNext(Integer value) {
                Log.d(TAG,"对Next事件"+value+"作出响应");
           }

           @Override
           public void onError(Throwable e) {
                Log.d(TAG,"对ERROR事件作出响应");
           }

           @Override
           public void onComplete() {
                Log.d(TAG,"对Complete事件作出响应");
           }
       });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的 RxJava 示例: ```java import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class RxJavaDemo { public static void main(String[] args) { Observable<String> observable = Observable.just("Hello, World!"); Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { // 在订阅时被调用 System.out.println("onSubscribe"); } @Override public void onNext(String s) { // 当收到数据时被调用 System.out.println("onNext: " + s); } @Override public void onError(Throwable e) { // 当发生错误时被调用 System.out.println("onError: " + e.getMessage()); } @Override public void onComplete() { // 当完成时被调用 System.out.println("onComplete"); } }; observable.subscribe(observer); } } ``` 这个示例中,我们创建了一个简单的 Observable 对象,它只发射了一个字符串 "Hello, World!"。然后我们创建了一个 Observer 对象,它定义了在收到数据、发生错误或完成时的行为。最后,我们通过调用 `observable.subscribe(observer)` 来订阅 Observable。 运行这个示例,你将会看到以下输出: ``` onSubscribe onNext: Hello, World! onComplete ``` 这表明在订阅时,`onSubscribe` 被调用;然后收到了数据 "Hello, World!",`onNext` 被调用;最后,`onComplete` 被调用,表示完成了数据的发射过程。 请注意,这只是 RxJava 的一个简单示例,RxJava 还有很多更强大的操作符和功能可以使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值