一:什么是RxJava:
RxJava是由Netflix开发的响应式扩展(Reactive Extensions)的Java实现。引用MSDN上对它的定义,Reactive Extensions是这样一个第三方库:它结合了可观察集合和LINQ式查询以达到异步和基于事件的编程效果。Netflix将这个库托管到了Github上,支持Java6以上的版本并且使它可以用于Android App开发。
rx框架扩展了观察者模式,添加相应操作符(函数),以支持对事件序列进行处理,使你可以无需关心异步编程,线程安全,非阻塞io等技术细节。
响应式代码的基本组成部分是Observables和Subscribers(事实上Observer才是最小的构建块,但实践中使用最多的是Subscriber,因为Subscriber才是和Observables的对应的)。 Observable发送消息,而Subscriber则用于消费消息。消息的发送是有固定模式的。Observable可以发送任意数量的消息(包括空消息), 当消息被成功处理或者出错时,流程结束。Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。 这看起来像标准的观察者模式, 但不同的一个关键点是:Observables一般只有等到有Subscriber订阅它, 才会开始发送消息(术语上讲就是热启动Observable和冷启动Observable。热启动Observable任何时候都会发送消息, 即使没有任何观察者监听它。冷启动Observable只有在至少有一个订阅者的时候才会发送消息)
二:如何去使用Rxjava
不论是githup上还是其官方网站上都有其依赖包 地址:https://github.com/ReactiveX/RxJava,官方包的下载地址: https://github.com/ReactiveX/RxJava/releases 我使用的是AndroidStudio 下载好了jar包之后就可以直接使用就好了,接下来就可以自己创建Android项目来使用RxJava了(注意这里是RxJava不是RxAndroid),后面会介绍关于RxAndroid的内容:
三:第一个例子(Hello World)
创建第一个观察者模式的函数:
private Observable <String> createObserver(){ return Observable.create new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> sub) { sub.onNext("Hello, world!"); sub.onCompleted(); } } ); }
创建一个订阅者模式的函数:
private Subscriber<String> createSubscribler(){ return new Subscriber<String>() { @Override public void onNext(String s) { System.out.println(s); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { } }; }
在你需要调用的时候应用就可以了
private void init(){ Observable <String> myObserver = createObserver(); Subscriber <String> mySubscriber = createSubscriber(); myObserver.subscrible(mySubscrible); }
上述代码可以简化成
private void demo(){ Observable.just("the string you want to send") .subscriber(new Action1<String>(){ @Override public void call(String s){ /**** do something you want **********/ } } ); }
just表示只发出一个消息,这样就可以省去了你要发出消息的操作
当你想要添加一些操作的时候可以用Map操作符来添加操作,操作符是很强大的功能,后面会接着去介绍
private void demo2() { Observable.just("the string you want to send") .map(new Func1<String, String>() { public String call(String s) { return s + ",添加了Map的使用"; }}) .map(new Func1<String, String>() { public String call(String SS){ return SS+",添加了Map中的多次修改"; } }) .subscribe(new Action1<String>() { @Override public void call(String s) { /****** do something you want ******/ } }); }
好了,这个是应用举例,类似于我们学习一门语言中的输出hello world ,后面会接着更新!
RxJava和RxAndroid用的越来越多,希望越来越多的人来研究一下这个。