Android:入门神秘Rxjava(本文主要基于Rxjava 2.0)
来源:互联网 发布:软件设计师 证书 编辑:程序博客网 时间:2024/06/06 03:33
Rxjava是什么?
官方介绍:
RxJava:a library for composing asynchronous and event-based programs using observable sequences for the Java VM// 翻译:RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
总结: 是一个基于事件流和实现异步操作的库,类似于AsyncTask Handler的作用;
原理: 被观察者(Observable)通过订阅(Subscribe)按顺序发送事件(Event)给观察者(Observer),观察者按顺序接受事件并作出处理;
Rxjava基本使用一(同步)
基本使用(一) : 代码简洁 从上到下链式调用
//创建被观察者 Observable 对象 决定什么时候触发事件以及触发什么样的事件 Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void onStart() { //事件未发送之前调用 用于做一些准备工作,比如重置数据或者清零 super.onStart(); } @Override public void call(Subscriber<? super Integer> subscriber) { //发送事件 相当于 onClick(); subscriber.onNext(1); subscriber.onNext(2); subscriber.onNext(3); //事件队列完结,当不会有新的onNext,会触发此方法 subscriber.onCompleted(); } }).subscribe(new Subscriber<Integer>() { //创建被观察者对象 @Override public void onCompleted() { Log.i(TAG, "对Complete事件作出响应"); } @Override public void onError(Throwable e) { //异常 同时会触发此方法 不允许再有事件发出 //onCompleted()和 onError()二者相互排斥 只能调用其一 Log.i(TAG, "对Error事件作出响应"); } @Override public void onNext(Integer integer) { Log.i(TAG, "对Next事件"+ integer +"作出响应" ); } });
打印日志
12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件1作出响应12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件2作出响应12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件3作出响应12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Complete事件作出响应
基本使用(二) :
Observer<Integer> observer=new Observer<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { } };
除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,他们的基本使用方式是完全一样的;
Rxjava的快速创建事件队列:
Observable observable = Observable.just(1, 2, 3);
创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来:
observable.subscribe(observer);// 或者:observable.subscribe(subscriber);
上面的方法实现的是同步的观察者模式;
Rxjava基本使用二(异步)
线程控制–Scheduler
Rxjava遵循的是线程不变的原则,哪里调用subscribe(),就在哪里生产事件; 那个线程生产事件,就在那个线程处理事件,如果是垮线程,就需要用到scheduler;(调度器也叫线程控制器);
- Schedulers.immediate(): 默认在当前线程执行;
- Schedulers.newThread(): 总是启动新的线程,在新线程中执行操作;
- Schedulers.io(): (读写文件,读写数据库.网络信息交互等)与newThread()的区别在于io()内部实现使用一个无数量上线的线程池组成,可以重用空闲的线程,所以在一般情况下比newThread()更有效;
- Schedulers.computation(): 计算所使用的,这个计算是的是CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算;
- AndroidSchedulers.mainThread(): 安卓专用的主线程;
通过 subscribeOn() 指定事件产生的线程或者所发生的线程;observeOn() 指定事件消费的线程或者所运行的线程;如下代码所示:
Observable.just(1, 2, 3, 4) // 指定 subscribe() 发生在 IO 线程 .subscribeOn(Schedulers.io()) // 指定 Subscriber 的回调发生在主线程 .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Integer>() { @Override public void call(Integer number) { Log.d(tag, "number:" + number); } });
以上代码的格式几乎算是非常常见,[ 后台线程取数据,前台线程显示 ];
阅读全文
0 0
- Android:入门神秘Rxjava(本文主要基于Rxjava 2.0)
- Android:手把手带你入门神秘的 Rxjava
- Android:手把手带你入门神秘的 Rxjava
- 【Android】RxJava 入门详解
- 【Android】RxJava入门
- android rxjava入门第一篇
- android RXJava入门(Rxjava1.0)
- RxJava入门
- RxJava 入门
- RxJava 入门
- RxJava 入门
- RXJava入门
- RxJava 入门
- RxJava入门
- Rxjava入门
- RxJava 入门
- RxJava 入门
- RxJava入门
- javascript函数之函数的调用
- python生成器
- 10个Python面试常问的问题
- 欢迎使用CSDN-markdown编辑器
- mybatis中的#和$的区别
- Android:入门神秘Rxjava(本文主要基于Rxjava 2.0)
- JS中的this对象详解
- Oracle表锁定后如何手动解锁
- 常用贷款词汇英文名称
- 用tensorflow做图像分割的查错技巧
- Android之路 4. 活动的启动模式
- USB host通讯
- VS2015/VS2017:C compiler identification is unknown
- Spring声明式事务