RxJava 之 Hello World

桃扇骨 2022-09-24 07:27 284阅读 0赞

原理介绍

什么是RxJava

  • RxJava 就是异步
  • RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。
  • 一个响应式编程框架

观察者模式应该不陌生,点这里可以重温一下概念。

RxJava组成

RxJava最核心的两个东西是Observable(被观察者,事件源)Subscriber(观察者)
Observable发出一系列事件,Subscriber负责处理这些事件。

一个Observable可以发出零个或者多个事件,直到结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onComplete()或者Subscriber.onError()结束。

RxJava相较于传统的观察者模式,还有一个特点,就是没有观察者时,主题是不会发送事件的。也就说是当一个Observable连一个Subscriber都没有时,Observable是不会发送事件的。这点和我们上学时,如果一节课一个学生都没来听课的话,那么老师也不会去讲课的道理是一样的。

RxJava之Hello world

RxJava 是一个方便我们实现异步的框架。同时其“响应式编程”的思路,对于我们也是一种挑战。在加上其各种强大的操作符调度器也是需要一定的学习成本的,姑且就把他当做一门“新的语言”,这里我们就从输出Hello world说起。

看到网上的许多教程都使用了Lambda语法进行编码,这个Lambda虽然很好,但不想在学习RxJava的过程中,增加无畏的难度,所以暂时不采用,代码暂时能看懂才是最要的,好看后期再说!

工程导入

  1. compile 'io.reactivex:rxjava:1.1.7'
  2. compile 'io.reactivex:rxandroid:1.2.1'

完整版Hello World

  1. /**
  2. * 被观察者,事件源
  3. */
  4. private Observable<String> myObserveable;
  5. /**
  6. * 观察者
  7. */
  8. private Subscriber<String> mySubscriber;

创建被观察者

  1. /**
  2. * 创建被观察者Observable
  3. */
  4. private void InitObserverr() {
  5. myObserveable = Observable.create(
  6. new Observable.OnSubscribe<String>() {
  7. @Override
  8. public void call(Subscriber<? super String> subscriber) {
  9. subscriber.onNext("hello world");
  10. subscriber.onCompleted();
  11. }
  12. }
  13. );
  14. }

创建观察者

  1. /**
  2. * 创建观察者Subscribe
  3. */
  4. private void InitSubscriber() {
  5. mySubscriber = new Subscriber<String>() {
  6. @Override
  7. public void onCompleted() {
  8. }
  9. @Override
  10. public void onError(Throwable e) {
  11. }
  12. @Override
  13. public void onNext(String s) {
  14. Log.e(MainActivity.class.getSimpleName(), "onNext--->" + s);
  15. Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
  16. }
  17. };
  18. }

观察者订阅主题(事件源/被观察者)

  1. myObserveable.subscribe(mySubscriber);

这句代码按照“字面意思”,感觉是被观察者订阅了观察者。但实际上,我们在这里实现的是观察者订阅被观察者(主题)。希望不要混淆,并习惯这个逻辑。

一旦mySubscriber订阅了myObservable,myObservable就会调用mySubscriber对象的onNext和onComplete方法,mySubscriber就会打印出Hello World!这里为了方便测试,同时Toast了一个Hello World!

这个订阅的实现,其实很关键。因为我们前面说过,在RxJava中,没有观察者时,被观察者是不会发布事件的

用强大的RxJava实现Hello World的打印,当然不是我们的初衷,这里只是从最基本的用法做出介绍。

精简版Hello world

简化Observable

RxJava内置了很多简化创建Observable对象的函数,比如Observable.just就是用来创建只发出一个事件就结束的Observable对象,上面创建Observable对象的代码可以简化为一行

  1. Observable<String> myObservable = Observable.just("Hello, world!");

简化Subscribe

有时候,我们其实并不关心OnComplete和OnError,我们只需要在onNext的时候做一些处理,这时候就可以使用Action1类。

  1. Action1<String> onNextAction = new Action1<String>() {
  2. @Override
  3. public void call(String s) {
  4. System.out.println(s);
  5. }
  6. };

subscribe 方法

subscribe方法有一个重载版本,接受三个Action1类型的参数,分别对应OnNext,OnComplete, OnError函数。

  1. myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction);

这样为了仅仅输出一个Hello World ,我们抛弃不重要的部分,代码就可以简化了:

  1. Observable.just("Hello, world!")
  2. .subscribe(new Action1<String>() {
  3. @Override
  4. public void call(String s) {
  5. System.out.println(s);
  6. }
  7. });

好了,RxJava 基础用法就到这里了!


发表评论

表情:
评论列表 (有 0 条评论,284人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RxJava Hello World

    原理介绍 什么是RxJava RxJava 就是异步 RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。 一个响应式编程框架 观察者

    相关 Hello World

    Hello World 一、简述          简单的Hello World程序。(时间久了就会忘,趁着还有印象先记下)     1、C语言:  控制台程序、有窗体

    相关 shell hello world

    以前接触linux的比较少,比较常用的几个命令能够使用,接下来的项目中需要使用Linux,所以最近希望能够增强一点Linux的知识,那么就从hello world开始吧 第一