RxJava
来源:互联网 发布:我的世界泰拉瑞亚js 编辑:程序博客网 时间:2024/06/11 18:56
RxJava
- Rx-X
- RxJava
作用
- 实现观察者设计模式
- 线程调度,类似EventBus
- 链式数据处理,类似Jdk8的Stream操作
观察者设计模式
- 概念:
- Java Api对观察者设计模式的支持
步骤
- 定义被观察者(Obserable)->发消息的人
- 定义观察者(Observer/Subscriber)–>收消息
- 发生关系–>订阅的动作Subscribe
例子
//1.定义被观察者 Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("我是发送的消息"); } }); //2.定义观察者 Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(String s) { System.out.println("onNext"); } }; //3.发生关系 observable.subscribe(observer);
onCompleted,onError,onNext几个方法的说明
onCompleted()方法是方法完成时的回调
onError()失败的回调
onNext()成功的回调
创建被观察者(发送消息的对象)的其他形式
1.使用create( ),最基本的创建方式:normalObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("create1"); //发射一个"create1"的String subscriber.onNext("create2"); //发射一个"create2"的String subscriber.onCompleted();//发射完成,这种方法需要手动调用onCompleted,才会回调Observer的onCompleted方法 }});2.使用just( ),将为你创建一个Observable并自动为你调用onNext( )发射数据:justObservable = Observable.just("just1","just2");//依次发送"just1"和"just2"3.使用from( ),遍历集合,发送每个item:List<String> list = new ArrayList<>();list.add("from1");list.add("from2");list.add("from3");fromObservable = Observable.from(list); //遍历list 每次发送一个/** 注意,just()方法也可以传list,但是发送的是整个list对象,而from()发送的是list的一个item** /4.使用defer( ),有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable:deferObservable = Observable.defer(new Func0<Observable<String>>() { @Override //注意此处的call方法没有Subscriber参数 public Observable<String> call() { return Observable.just("deferObservable"); }});5.使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器:intervalObservable = Observable.interval(1, TimeUnit.SECONDS);//每隔一秒发送一次6.使用range( ),创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异常:rangeObservable = Observable.range(10, 5);//将发送整数10,11,12,13,147.使用timer( ),创建一个Observable,它在一个给定的延迟后发射一个特殊的值,等同于Android中Handler的postDelay( )方法:timeObservable = Observable.timer(3, TimeUnit.SECONDS); //3秒后发射一个值8.使用repeat( ),创建一个重复发射特定数据的Observable:repeatObservable = Observable.just("repeatObservable").repeat(3);//重复发射3次
创建观察者的多种形式
常见的基本的6种形式
private void way6() { Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("发送消息"); } }).subscribe(new Action1<String>() { @Override public void call(String s) { Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); } });}private void way5() { Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("发送消息"); } }).subscribe(new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); } });}private void way4() { List<String> list = Arrays.asList("a", "b", "c", "d"); //1.定义被观察者 Observable<String> observable = Observable.from(list); //2.定义观察者 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(String s) { Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); } }; //3.订阅 observable.subscribe(subscriber);}private void way3() { List<String> list = Arrays.asList("a", "b", "c", "d"); //1.定义被观察者 Observable<List<String>> observable = Observable.just(list); //2.定义观察者 Subscriber<List<String>> subscriber = new Subscriber<List<String>>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(List<String> strings) { Toast.makeText(getApplicationContext(), "strings.size:" + strings.size(), Toast.LENGTH_SHORT).show(); } }; //3.订阅 observable.subscribe(subscriber);}private void way2() { //1.定义被观察者 Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("我是发送的消息"); } }); //2.定义观察者 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(String s) { Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show(); } }; //3.订阅 observable.subscribe(subscriber);}private void way1() { //1.定义被观察者 Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("我是发送的消息"); } }); //2.定义观察者 Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError"); } @Override public void onNext(String s) { System.out.println("onNext"); } }; //3.发生关系 observable.subscribe(observer);}
线程调度
- 用到Andorid相关的调度器需要用到RxAndroid,
io.reactivex:rxandroid:1.2.1
- Schedulers.io()
- AndroidSchedulers.mainThread()
操作符
类似Jdk8的Stream
RxJava 2.0
阅读全文
0 0
- rxjava
- RXJava
- RXJava
- RXJava
- RxJava
- Rxjava
- RxJava
- RxJava
- Rxjava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- rxjava
- RxJava
- JavaScript 正则表达式和全局对象
- linux 编译安装amqp
- cs231n notes:Python Numpy Tutorial
- 详解zabbix安装部署(Server端篇)
- ISFP职业规划,“做事情想一出是一出,不行了再换”的28岁ISFP女孩
- RxJava
- VTK图形处理之自定义纹理映射Filter
- 设计模式六大原则(3):依赖倒置原则
- 小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)
- 这样的一个不带头节点的循环双链表哪里出错了呢
- 凛冬将至
- digest介绍
- <学习html>第一天笔记-浏览器内核、web标准、html标准语法格式
- 安装paramiko遇到的问题