首页 > 编程 > Java > 正文

RxJava使用小结

2019-11-06 10:02:08
字体:
来源:转载
供稿:网友

1.Rxjava的定义

         RxJava是基于观察者模式实现的。

         RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based PRograms using observable sequences for theJavaVM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。RxJava本质上是实现异步操作的库。

2.使用RxJava的优势

        异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTaskHandler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

3.如何去使用(初步认识)

      在开始之前,先学习一下RxJava的主要属性和方法:

      Observable:(可观察者,即被观察者),在需要时发出事件

      Observer:(观察者),观察者处理事件

      Subscribe:(订阅)事件,Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer

      subscribeOn(AndroidSchedulers.io()):事件发生在io线程,即Observable.onSubscribe被激活时所处的线程(事件产生线程)

      observeOn(AndroidSchedulers.mainThread()):事件处理在子线程中,(事件消费线程)

      RxJava采用『后台线程取数据,主线程显示』的程序策略

3.1 引入依赖

    compile 'io.reactivex:rxandroid:1.1.0'    compile 'io.reactivex:rxjava:1.1.0'

3.2 创建被观察者

Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {

                //可在此方法中执行耗时操作,请求网络等

                subscriber.onNext("努力");                subscriber.onNext("拼搏");                subscriber.onNext("乐观");                subscriber.onNext("负责");                subscriber.onNext("担当");            }        });

3.3 指定产生事件和消费事件的线程(产生事件在子线程,消费事件在主线程策略)

observable.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread());

3.4 创建观察者

/** * 在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作, * 例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空 * 不可指定线程,在Subscriber所发生的线程中调用 * 要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法*/

Subscriber<String> subscriber = new Subscriber<String>() {            @Override            public void onCompleted() { //事件完成时调用执行            }            @Override            public void onError(Throwable e) { //事件出错时调用执行            }            @Override            public void onNext(String s) {                Log.e("schedulerSubscriber", "onNext: " + s ); //事件消费时调用执行            }        };

3.5 订阅事件

observable.subscribe(subscriber);

4.使用总结

4.1 事件产生的3中方法:

       第一种:Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext(" ");                             ....

            }        });

       第二种:Observable.just( , , , );

       第三种:Observable.from( );(括号中是数组)

4.2 Action0和Action1的认识

       Observable.subscribe(new Action1( Object obj){

                                   .....

      });

     Action0 是 RxJava 的一个接口,它只有一个方法 call(),这个方法是无参无返回值的

     Action1 也是一个接口,它同样只有一个方法 call(T param),这个方法也无返回值,但有一个参数

5. 使用RxJava注意的问题

       Observable持有Context时会导致内存泄漏(创建Subscription时,会以某种方式持有了Context的引用,如果没有及时的结束,内存占用会越来越大)

       解决方法:在生命周期的某个时刻及时的取消订阅(使用CompositeSubscription来持有所有的subscriptions,然后在onDestory()或onDestoryView()里取消所有的订阅)

       持有:compositeSubscription.add(subscription);

       取消:compositeSubscription.unsubscribe();


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表