RxJava-简介及Observable创建

本文介绍了RxJava的基本概念,包括RxJava的异步处理优势和特点。重点讲解了RxJava的重要组成部分,如Observable、Observer和subscribe事件。文章详细阐述了Observable的创建方法,如create()、from()和just(),并提到了Observable的热和冷分类。最后,推荐了相关的RxJava学习资源。

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

       异步,对于Android开发者来说,听到耳根烂的一个词语。Android中Handler和AsyncTask其实就是异步操作的典型封装。异步操作的关键点就是代码简洁,如果碰到繁琐的逻辑功能,繁琐的异步代码,让人头大,不知所以然。在异步流行的程序时代,RxJava应运而生。RxJava 的优势就是简洁,但它的简洁的与众不同之处在于,即使程序逻辑变得越来越复杂,它依然能够保持简洁。RxJava作为一个优秀的异步操作工具库,有必要花时间学习下。

1.RxJava的简介

       RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。

        对观察者模式不熟悉的,可参考设计模式-观察者模式

2.RxJava的特点

        1.易于并发从而更好的利用服务器的能力;

        2.易于有条件的异步执行;

        3.一种更好的方式来避免回调地狱;

        4.一种响应式方法;

3.RxJava的重要组成

基本构成

        Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。

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

重要方法

        Observable的生命周期中有三个重要的事件,onNext(检索数据)、onCompleted(完成)和onError(发现错误)。

        onNext()即通知Observable放松数据至Observer;

        onCompleted() 即通知观察者Observable没有更多的数据;

        onError()即观察者有错误出现了;

4.Observable分类

       熟悉观察者模式的都知道,观察者模式分为拉模型和推模型两种模式。其实,Observable也有两种模式。在RxJava介绍文档中,Observable是从发射物的角度来区分的,有两种不同的Observables:热的和冷的。一个"热"的Observable典型的只要一创建完就开始发射数据,因此所有后续订阅它的观察者可能从序列中间的某个位置开始接受数据(有一些数据错过了)。一个"冷"的Observable会一直等待,直到有观察者订阅它才开始发射数据,因此这个观察者可以确保会收到整个数据序列。

5.Observable创建

Observable.create()

        create()方法使开发者有能力从头开始创建一个Observable。它需要一个OnSubscribe对象,这个对象继承Action1,当观察者订阅我们的Observable时,它作为一个参数传入并执行call()函数。Observable通过使用subscriber变量并根据条件调用它的方法来和观察者通信。

<span style="font-size:14px;">        Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {

                for (int i = 0; i < 5; i ++) {
                   subscriber.onNext(i);
                }
                subscriber.onCompleted();
            }
        });
        Subscription subscriber = obserale.subscribe(new Observer<Integer>() {
            @Override
            public void onCompleted() {
                Log.i("123", "onCompleted: ");
            }

           @Override
            public void onError(Throwable e) {
                Log.i("123", "onError: ");
            }

           @Override
           public void onNext(Integer integer) {
                Log.i("123", "onNext : " + integer);
            }
        });</span>

        通过Observable.create()方法创建了Observable对象,并调用subscribe()方法对Observable订阅。订阅以后,我们开始接收Observable发送的数据(即定义的整数)。

Observable.from()

        上面例子里,定义了一个列表通过一个for循环一个个的发送来完成信息的发送。假如已经存在的数据列表,当然使用上面的方法肯定可以实现。除了上面的方法,有没有其他的实现方式呢?当然可以实现,要不然这个小标题就无用了,具体怎么实现的,看下面代码。

<span style="font-size:14px;">        List<Integer> lists = new ArrayList<>();
        lists.add(1);
        lists.add(2);
        lists.add(3);
        lists.add(4);
        lists.add(5);
		
	Observable<Integer> observable = Observable.from(lists);
        Subscription subscription = observable.subscribe(new Observer<Integer>() {


            public void onCompleted() {
                Log.i("123", "onCompleted: ");
            }

            public void onError(Throwable e) {
                Log.i("123", "onError: ");
            }

            public void onNext(Integer integer) {
                Log.i("123", "onNext : " + integer);
            }
        });</span>
   from()创建符可以从一个列表/数组来创建Observable,并一个接一个的从列表/数组中发射出来每一个对象,或者也可以从JavaFuture类来创建Observable,并发射Future对象的.get()方法返回的结果值。传入Future作为参数时,我们可以指定一个超时的值。Observable将等待来自Future的结果;如果在超时之前仍然没有结果回,Observable将会触发onError()方法通知观察者有错误发生了。

Observable.just()

       Observable.just()方法主要用于将java对象转变为Observable对象发射出去。

<span style="font-size:14px;">        Observable<String> observable = Observable.just(getMessage());
        Subscription subscription = observable.subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("123", "onNext : " + integer);
            }
        });</span>
   just()方法可以传入一到九个参数,它们会按照传入的参数的顺序发射。just()方法也可以接受列表或数组,就像from()方法,但是它不会迭代列表发射每个值,它将会发射整个列表。如果发射一组定义好的数据时采用此方式。
      just()创建符,它发射出值后,Observable正常结束。

参考资料

RxJava Essentials

给 Android 开发者的 RxJava 详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值