RxJava基础学习(一)

RxJava流行了那么长的时间,现在也才开始学习,确实有点晚了。学而时习之,不亦说乎!又何必在乎别人的看法呢,只要能让自己不断前进就是好的。下面进入正题。首先了解RxJava到底是用来干嘛的,即它的基本含义。本篇也只是阐述个人在学习Rxjava中的一些理解和基本的使用。
RxJava实质上是一个异步调度处理的程序库,个人看来它将异步的业务逻辑通过相对应的事件响应序列化了操作,从代码看上去可读性更强。做到对R小Java基本的使用,需要了解几个概念,包括Observer、Observable、Subscriber
1.Observable,被观察者,主动发起订阅请求。
2.Observer,事件观察者,用于接收订阅的事件消息(Observable和Subject发送的信息)。
3.Subscriber,是Observer的实现类,也是用于接收订阅消息的,与之不同的在于实现了Observer,并多了onStart()和unsubscribe()方法, 用于取消订阅请求。
4.Subscription ,Observable调用subscribe( )方法返回的对象,同样有unsubscribe( )方法,可以用来取消订阅事件;
5.Action0,是RxJava中的一个接口,它只有一个无参call()方法,且无返回值,Action1,Action2...Action9等,分别拥有1...9个参数
6.Func0:与Action0非常相似,也有call()方法,但是它是有返回值的,同样也有Func0、Func1...Func9;


一般而言,使用RxJava只需要几个基本步骤就可以完成:


一、创建消息订阅者(Observable),有多种创建方式,根据业务需求进行创建。
1.使用create方法创建

Observable  observable=  Observable.create(new Observable.OnSubscribe<String>() {

  @Override

  public void call(Subscriber<? super String> subscriber) {

      subscriber.onNext("hello"); //发送订阅消息" hello "

      subscriber.onNext("world!!"); //发送订阅消息" world "

      subscriber.onCompleted();//发送订阅消息完成

  }

});

2.使用just方法创建

observable  =  Observable.just("hello "," world ");   //内部依次发送" hello "和" world "

3.使用from方法创建

String []names = {"lishi108","hello world"};

observable  =  Observable.from(names);

4.其他的创建方式

observable = Observable.interval(1, TimeUnit.SECONDS);//每隔一秒发送一次订阅消息

observable = Observable.range(10, 3);//将发送整数10,11,12

observable = Observable.timer(2, TimeUnit.SECONDS);  //2秒后发送一次订阅消息

observable = Observable.just("hello").repeat(3);//重复发送3次

二、创建消息接收者(Observer)
实现Observer接口即可

mObserver = new Observer<String>() {

  @Override

  public void onCompleted() {

      //业务处理完后的操作

  }

  @Override

  public void onError(Throwable e) {

     //发生异常的处理

  }

  @Override

  public void onNext(String s) {

      //接收处理的数据S

  }};

三、创建桥梁,即关联操作
 observable.subscribe(mObserver); 
四、普通使用上面的3个步骤完成即可,但是更多的在在不同线程上操作。下面我们来看看怎么在不同的线程里面进行使用RxJava的操作,这就需要其他几个方法的介绍。

1.subscribeOn()主要改变的是订阅的线程。即call()执行的线程

2.ObserveOn()主要改变的是发送的线程。即onNext()执行的线程。

3.Scheduler线程的控制

1)Schedulers.immediate():默认的 Scheduler,直接在当前线程运行。

2)Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。

3)Schedulers.io(): 新开线程(常用来读写文件、读写数据库、网络信息交互等)。多数情况下 io() 比 newThread() 更有效率。但是不要把计算工作放在 io() 中,可以避免创建不必要的线程。

4)Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。

5)Android 还有一个专用的 AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。

控制在不同线程的切换使用:

observable .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程
.observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程
.subscribe(mObserver);




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值