RxJava 之 Hello World 桃扇骨 2022-09-24 07:27 165阅读 0赞 ## 原理介绍 ## ### 什么是RxJava ### * **RxJava 就是异步** * **RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。** * **一个响应式编程框架** 观察者模式应该不陌生,[点这里][Link 1]可以重温一下概念。 ### 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的过程中,增加无畏的难度,所以暂时不采用,代码暂时能看懂才是最要的,好看后期再说! ### 工程导入 ### compile 'io.reactivex:rxjava:1.1.7' compile 'io.reactivex:rxandroid:1.2.1' ### 完整版Hello World ### /** * 被观察者,事件源 */ private Observable<String> myObserveable; /** * 观察者 */ private Subscriber<String> mySubscriber; **创建被观察者** /** * 创建被观察者Observable */ private void InitObserverr() { myObserveable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("hello world"); subscriber.onCompleted(); } } ); } **创建观察者** /** * 创建观察者Subscribe */ private void InitSubscriber() { mySubscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.e(MainActivity.class.getSimpleName(), "onNext--->" + s); Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); } }; } **观察者订阅主题(事件源/被观察者)** 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对象的代码可以简化为一行 Observable<String> myObservable = Observable.just("Hello, world!"); > 简化Subscribe 有时候,我们其实并不关心OnComplete和OnError,我们只需要在onNext的时候做一些处理,这时候就可以使用Action1类。 Action1<String> onNextAction = new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }; > subscribe 方法 subscribe方法有一个重载版本,接受三个Action1类型的参数,分别对应OnNext,OnComplete, OnError函数。 myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction); 这样为了仅仅输出一个Hello World ,我们抛弃不重要的部分,代码就可以简化了: Observable.just("Hello, world!") .subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } }); 好了,RxJava 基础用法就到这里了! -------------------- [Link 1]: http://blog.csdn.net/toyota11/article/details/52007768
还没有评论,来说两句吧...