RxJava 使用总结
来源:互联网 发布:apache kylin 安装 编辑:程序博客网 时间:2024/05/16 16:05
RxJava
What ? (RxJava)
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。主要用来解决异步操作。
How ?(RxJava)
- 相关概念
观察者(Observer、Subscriber)
被观察者(Observable)
订阅(subscribe)
RxJava是一种观察者模式,被观察者和观察者进行订阅之后,如果被观察者发出了动作,那么会触发观察者。 - 创建被观察者的方式
Observable.create()
Observable.just()
Observable.from() - 创建观察者的方式
new Observer(){…}
new Subscriber(){…} - 订阅方式
observable.subscribe(observer)
observable.subscribe(subscriber) - 使用方式
//普通用法Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onStart();//执行之前 subscriber.onNext("");//执行 subscriber.onCompleted();//执行结束 //方法和onComplete()方法为互斥,只能执行一个 //subscriber.onError(new Throwable()); }});
//进阶用法Observable.just("") .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程 .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程 .subscribe(new Action1<Integer>() { @Override public void call(Integer num) { Log.d("TAG", "num------>" + num); } });
- 操作符(神奇之处)
//---------------map 将一个对象转换为另一个对象--------------- Observable.just("1") .map(new Func1<String, Integer>() { @Override public Integer call(String s) { return Integer.parseInt(s); } }) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.i("TAG","s---->"+integer); } });
//---------------flatMap 接收一个Observable的输出作为输入,同时输出另外一个Observable--------------- ArrayList<List<String>> datas = new ArrayList<>(); Observable.from(datas) .flatMap(new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { return Observable.from(strings); } }) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { Log.i("TAG","--onCompleted------->"); } @Override public void onError(Throwable e) { Log.i("TAG","--onError------>"); } @Override public void onNext(String str) { Log.i("TAG","--onNext------>"+str); } });
//---------------filter 进行过滤满足的条件,否则终止向下执行---------------Observable.just("") .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return null != null; } }) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { Log.i("TAG", "onCompleted----->"); } @Override public void onError(Throwable e) { Log.i("TAG", "onError----->"); } @Override public void onNext(String s) { Log.i("TAG", "onNext----->" + s); } });
//---------------compose 进行某一功能的统一处理---------------Observable.just("1") .compose(new Observable.Transformer<String, Integer>() { @Override public Observable<Integer> call(Observable<String> stringObservable) { return stringObservable.map(new Func1<String, Integer>() { @Override public Integer call(String s) { return Integer.parseInt(s); } }).filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { return integer.compareTo(0) > 0; } }); } }) .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { Log.i("TAG", "onCompleted----->"); } @Override public void onError(Throwable e) { Log.i("TAG", "onError----->"); } @Override public void onNext(Integer s) { Log.i("TAG", "onNext----->" + s); } });
//---------------skip(跳到某一位置) take(获取多少位数据)---------------ArrayList<String> datas=new ArrayList<>(); Observable.just(datas) .skip(2) .take(2) .subscribe(new Subscriber<ArrayList<String>>() { @Override public void onCompleted() { Log.i("TAG", "onCompleted----->"); } @Override public void onError(Throwable e) { Log.i("TAG", "onError----->"); } @Override public void onNext(ArrayList<String> s) { Log.i("TAG", "onNext----->" + s.toString()); } });
- 操作符总结
Observable.map() ------->处理数据操作 ------->把一个事件转换为另一个事件 ------->用于变换Observable对象Observable.flatMap() ------->接收一个Observable的输出作为输入,同时输出另外一个ObservableObservable.filter() ------->过滤结果Observable.take() ------->输出最多指定数量的结果Observable.skipe() ------->跳到某一个位置开始执行Observable.doOnNext() ------->输出之前做的操作Observable.subscribeOn(Schedulers.io()) ------->观察者运行的线程Observable.observeOn(AndroidSchedulers.mainThread()) ------->订阅者运行的线程注意:1.Observable和Subscriber可以做任何事情2.Observable和Subscriber是独立于中间的变换过程的3.RxJava的强大性就来自于它所定义的操作符
Why ? (RxJava)
- 异步操作
- 逻辑清晰
阅读全文
1 0
- RxJava使用总结
- RxJava使用总结
- RxJava 使用总结
- retrofit2、RxJava简单使用总结
- 关于Rxjava的使用总结
- RxJava学习(二)——RxJava使用场景总结
- RxJava使用小总结:map家族
- RXJAVA的入门和使用总结
- RxJava 总结
- RxJava总结
- RxJava----使用
- RxJava使用
- RXjava 使用
- RxJava使用小总结:Observable的创建方式、过滤Observable
- Android RxJava 使用RxJava开发
- RxJava初步学习总结
- Rxjava 技术总结
- 关于RxJava学习总结
- poj3061 Subsequence(尺取法)
- Smeech
- jQuery EasyUI简述
- HDU 1285 确定比赛名次
- 2017CSU暑假集训二 G-River Hopscotch
- RxJava 使用总结
- 写高质量OC代码52建议总结:44.通过Dispatch Group机制,根据系统资源状况来执行任务
- 多线程
- Ubiquitous Religions 并查集入门
- AJAX 跨域请求
- 剑指Offer:构建乘积数组(一刷)
- Service初识(二)
- 初学51单片机——简单的流水灯程序
- Git 右键添加Git Bash Here