android之RxJava的学习,从浅到深,从入门到别放弃(一)

项目空档期,闲来无事,而且经常忘了一些东西,所以决定还是将RxJava相关的写到博客上,方便查找。

时代在变迁,技术也在不断的更新,说实话,现在如果作为一个Android开发者,如果不知道RxJava,RxAndroid,Retrofit,MVP等比较流行的框架和架构,感觉有点对不起自己是安卓开发者这个身份。新技术的出现必然有它存在的意义,既然是有意义的,我们当然知道的越多越好。当然了,这些知识技术你不用也可以,毕竟用其他的也可以实现,看个人喜好吧。

RxJava从出来开始一直被大家所看好,主要的原因是因为它方便啊,太方便了,不对,应该是用简洁明了来形容比较好,看到后面你会觉得它可能代码看起来比较多,但是简洁明了。代码并不是越少越好,这点还是得说明下。

先从概念来说吧。RxJava它跟我们常见的设计模式有点像,观察者和被观察者。你可以将RxJava的使用分为几个点:
1.发射源Observable(被观察者);
2.接收源Observer(观察者);
3.订阅,也就是关联发射源和接收源,就是将发射源和接收源绑定起来。

发射源发出事件,接收源接收发出的事件,但是必须先订阅事件,发射源才会发射事件,然后接收源接收事件,如果没有订阅事件就直接发射事件,那么GG了,因为不绑定的话是不会发射事件的,使用subscribe()方法进行订阅绑定。

创建发射源Observable

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
  @Override
  public void call(Subscriber<? super String> subscriber) {
      subscriber.onNext("msg1"); //发射一个字符串
      subscriber.onNext("msg2"); //再发射一个字符串
      subscriber.onCompleted(); //发射完成
  }});

创建接收源

Observer observer = new Observer<String>() {
  @Override
  public void onCompleted() {
      //接收完成
  }
  @Override
  public void onError(Throwable e) {
      //接收异常
  }
  @Override
  public void onNext(String s) {
      Log.d("test","接收到的字符串:"+s);
  }};

订阅(即将发射源和接收源关联起来)

observable.subscribe(observer);

这样一个事件就完成了,observer的onNext方法会依次接收到并打印observable发送的两个字符串。所以整个过程就是:
发射源.subscibe(接收源);

发射源和接收源就看自己的情况而定了。上面的例子是最基本的发射源和接收源的创建方式,下面还有几个创建方式。

发射源Observable其他创建方式:
1.just(),发送多个事件,例子:

Observable observable =Observable.just("msg1","msg2"); //逐个发送

2.from(),遍历一个list并逐个发送它的item,例子:

Observable observable =Observable.from(list); 

3.repeat(),重复发送多次,例子:

Observable observable =Observable.just("msg1","msg2").repeat(5);

4.range(),发送一个有顺序的整数序列,有两个参数,第一个参数是这个序列的开始,第二个参数是发送的个数,例如:

Observable observable=Observable.range(1, 5); //逐个发送1,2,3,4,5

5.timer(),延迟发送,跟Handler的延迟发送效果一样,不过注意,它这里并不能像前面的那几个方法一样可以自己设定发送什么内容,它发送内容的内定的,你只能在接收源那里进行操作:几秒后做什么操作,而不能几秒后发送什么。例如:

Observable observable = Observable.timer(5, TimeUnit.SECONDS); 

6.interval(),每隔一段时间发送特定消息,跟timer类似,timer是多少秒后执行某个操作,而这个是每隔多少秒后执行某个操作。例如:

Observable observable = Observable.interval(5, TimeUnit.SECONDS);//每隔5秒发送一次,然后在接收源那里做操作,就相当于每隔5秒执行某个操作了。
7.defer(),

接收源Observer其他创建方式:
1.ActionX;
2.FuncX;
看了前面的应该都知道了,接收源是Observer,我们是用observable.subscribe(observer)来进行事件的订阅,在observer里面有三个方法:onCompleted、onError、onNext,如果我们不需要判断是否complete或者是否有错,那么我们可以直接用Action或Func,即observable.subscribe(ActionX)或者observable.subscribe(FuncX)。
ActionX和FuncX,X代表接收源的call方法中的参数个数,区别是FuncX是有返回值的,ActionX没有返回值,例如:

observable.subscribe(new Action1<String>() {
      @Override
      public void call(String msg) {
          //逐个接收发送过来的数据
      }
});

可能就有人会问了,ActionX和FuncX对参数个数的要求是一样的,那有什么区别,区别很大,区别就像:工厂生产了一支笔,你现在需要用这个笔来写字,如果用ActionX,那么工厂只是创造了这个笔就完事了,并没有把笔返回给你,那你就没法使用这支笔了,所以你要用FuncX,工厂就会把生产的笔返回给你,你就可以用它进行其他操作了,这个例子在后面的文章会举例说明的,因为这涉及到操作符,后面会说明。

发布了33 篇原创文章 · 获赞 49 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/gsw333/article/details/70273315
今日推荐