0.前言
本文主要记录RxJava的初步用法,以对RxJava有一个直观的感受。官网在这里,RxJava项目地址在这里。
1.基础知识
ReactiveX(响应式编程)根据官网介绍:ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.(ReactiveX是通过使用观察序列构成的异步和基于事件的程序库)也就是说通过观察者模式来完成的。既然是通过观察者模式实现的也就包含了观察者、被观察者、注册、发布等等概念了。
1.1基础结构
RxJava主要组成部分有observable, operator和susbscriber。一般响应式编程的信息流如下所示:
Observable -> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
也就是说,observable是事件的生产者,subscriber是事件最终的消费者。
因为subscriber通常在主线程中执行,因此设计上要求其代码尽可能简单,只对事件进行响应,而修改事件的工作全部由operator执行。
1.2 案例
先用最简单的例子来体会这个框架。
1)创建 Observable
Observable 即被观察者,决定以什么样的方式触发观察者。
Observable myObservable=Observable.create(new Observable.OnSubscribe<String>()
{
@Override
public void call(Subscriber<? super String> sub)
{
sub.onNext("Hello, world!");
sub.onCompleted();
}
}
);
2)创建Observer
Observer即观察者,决定事件被触发时会有怎么样的行为。
Observer<String> observer = new Observer<String>() {
@Override
public void onNext(String s) {
System.out.println("Item: " + s);
}
@Override
public void onCompleted() {
System.out.println("Completed!");
}
@Override
public void onError(Throwable e) {
System.out.println("Error!");
}
};
3)订阅
myObservable.subscribe(observer);
通过subscribe()
方法就可以将观察者与被观察者进行连起来。
2.操作符
有时候需要对原始输入的事件进行变换以简化流程,这些功能的实现就需要operator来处理。
Observable.just("Hello, world!")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + " -Dan";
}
})
.subscribe(s -> System.out.println(s));
通过map()
可以将原始的Hello, world!
输入转换成Hello, world! -Dan
传递给之后的处理流程。
这里有详细操作符。
3.线程
在RxJava中,你可以通过subscribeOn()来指定Observer的运行线程,通过observeOn()指定Subscriber的运行线程。这两个方法都是operator,因此它们可以像所有operator那样作用于任何的Observable。
参考:
http://codethink.me/2015/05/09/intro-of-rxjava/?utm_source=tuicool&utm_medium=referral
http://reactivex.io/documentation/operators.html
http://gank.io/post/560e15be2dca930e00da1083
网友评论