Rxjava基本使用
来源:互联网 发布:乐福总决赛第七场数据 编辑:程序博客网 时间:2024/06/05 20:12
Rxjava自去年开始热度越来越高,自己也开始在之后的项目中使用这个开源库。不用不知道,谁用谁知道,真的是太爽了。现在稍微闲下来点,所以就花点时间把该库的一些用法好好总结下。Rxjava主要在android中用来做一些异步操作,能够实现线程间快速切换,它和Thread + Handler ,AsyncTak做异步操作相比代码更加简洁,后期维护更加方便。
1.使用该库的时候首先需要在项目的build.gradle中添加依赖
compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'
2.Rxjava使用:
Rxjava采用观察者设计模式,首先创建Observable(被观察者)和Observer(观察者),通过subscribe()实现两者的订阅关系,在需要的时候Observable发出事件来通知Observer。
2.1.创建Observable
查看Observable源码,其构造方法被Protected所修饰,所以我们不能直接通过new来创建其实例,但是Observable为我们提供了大量的static方法获取Obserbale实例对象。
2.1.1.使用create()创建Observable:
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello RxJava!"); subscriber.onCompleted(); } }); //创建被观察者之后,还需要创建观察者,然后通过subscribe()将观察者注册到被观察者上,当被观察者被订阅以后就会自动调用call()方法。 //创建观察者: Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { Log.e(tag , "onCompeleted.."); } @Override public void onError(Throwable e) { Log.e(tag , "onError.."); } @Override public void onNext(String str) { Log.e(tag , "onNext: " + str); } }; //添加订阅,订阅成功以后,Observable会自动调用call()方法,这样观察者将会调用onNext()和onComplete()方法。执行默认情况下call()方法和observer中的方法都是运行在主线程中的。我们可以通过subscribeOn()和observeOn()来指定被观察者和观察者运行的线程。 observable.subscribeOn(Schedulers.io()) //指定被观察者运行的线程,即call()方法在哪个现场中执行 .observeOn(AndroidSchedulers.mainThread()) //指定观察者运行的线程,mainThread是android主线程 .subscribe(observer); // 将观察者注册到被观察者上 //打印结果 onNext: Hello RxJava! onCompeleted..
2.1.2.通过from()创建Observable对象
//使用from(T[] arr)或者from(Iterable iterable)创建Observable,内部会对其传入的数据进行遍历,然后调用subscribe的onNext()方法,遍历结束以后会调用subscribe的onComplete()方法。 Observable.from(new String[]{"hello" , "rxjava"}) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { Log.e(tag , "onCompleted.."); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.e(tag , "onNext: " + s); } }); //打印结果 onNext: hello onNext: rxjava onCompleted..
2.1.3.通过interval()创建Observable对象
//interval()返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列 Observable.interval(1 , TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { KLog.e("call: " + aLong.longValue()); } }); //打印结果 call:0 call:1 call:2 ....
2.1.4.使用just()创建Observable对象
//just()将单个数据转换为发射该数据的Observable, 它和from类似,但是from会将数组或者iterable数据取出来逐个发射,而just只是原样发射,将数组或iterable当作单个数据。它接受一至九个参数。 List<String> strs = new ArrayList<>(); strs.add("Hello"); strs.add("Rxjava"); Observable.just(strs) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<String>>() { @Override public void onCompleted() { Log.e(tag , "onCompleted..."); } @Override public void onError(Throwable e) { Log.e(tag , "onError: " + e.getMessage()); } @Override public void onNext(List<String> strings) { Log.e(tag , "onNext: " + strings.toString()); } }); //打印结果 onNext:[Hello, Rxjava] onCompleted...
2.1.5.使用range()创建Observable对象
//使用range()创建发送指定整数序列的Observable , range(int start , int count) , start表示启始值 , count表示数据的个数,count为0时不发射任何数据,为负数时候会抛异常。 Observable.range(2 , 5) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Integer>() { @Override public void onCompleted() { Log.e(tag , "onCompleted..."); } @Override public void onError(Throwable e) { Log.e(tag , "onError: " + e.getMessage()); } @Override public void onNext(Integer integer) { Log.e(tag , "onNext: " + integer); } }); //打印结果 onNext:2 onNext:3 onNext:4 onNext:5 onNext:6 onCompleted...
2.1.6.使用timer()创建Observable对象
//通过timer()可以创建一个指定延时之后发射数据的Observable Observable.timer(2 , TimeUnit.SECONDS) .subscribeOn(Schedulers.computation()) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Long>() { @Override public void onCompleted() { Log.e(tag , "onCompleted..."); } @Override public void onError(Throwable e) { Log.e(tag , "onError: " + e.getMessage()); } @Override public void onNext(Long aLong) { Log.e(tag , "onNext: " + aLong); } }); //掩饰2s以后控制台打印: onNext:0 onCompleted...
阅读全文
1 0
- RxJava的基本使用
- Rxjava基本使用
- RxJava的基本使用
- RxJava基本使用
- Rxjava基本使用
- RxJava的基本使用
- RxJava基本使用
- RxJava的基本使用
- Rxjava基本使用
- RxJava 与 Retrofit 基本使用
- RxJava RxAndroid基本使用介绍
- RxJava(RxAndroid)基本使用入门
- RxJava学习之基本使用
- RxJava RxAndroid基本使用介绍
- Rxjava(1.基本使用)
- RxJava 2.0的基本使用
- RxJava(RxAndroid)基本使用入门
- Retrofit+Rxjava+okhttp基本使用
- 【单片机笔记】OLED控制器SSD1306及驱动代码
- opencv打开摄像头显示视频
- 老那学python之目标
- 欧拉回路
- UVA
- Rxjava基本使用
- Activity之间传递值
- JDK容器学习之LinkedHashMap(二):迭代遍历的实现方式
- Windows 修改hosts过滤小游戏
- vs2013调用caffe的配置过程(GPU版本)
- python dlib学习(七):人脸特征点对齐
- hadoop fs、hadoop dfs与hdfs dfs命令
- NoSQL:memcached操作
- Java面向对象的三大特性