rxjava 的了解和使用
来源:互联网 发布:饥荒巨人的统治mac版 编辑:程序博客网 时间:2024/05/22 12:47
rxjava 的了解和使用
最近发现好多人都在用rxjava,决定学习一下,看了好多文章,决定记下来大家共同学习,rxjava大神:扔物线,hi大头鬼hi,主要是看的他们的一些文章。
为什么要在android中用到rxjava:
我们为什么要在Android中使用RxJava。
什么是rxjava?
rxjava就是扩展的观察者模式,observer观察者observable被观察者subscribe实现订阅。
实现rxjava
实现rxjava首先要创建observer和observable;
首先创建observer:
Observer observer = new Observer<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String o) { Log.i("next",o); } };
也可以这样创建observer:
Subscriber subscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String o) { } };
创建observable:
Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("hello rxjava"); } });
使用observable.create是最基本的创建方式,observable还可以这样创建比如参数有多个:
String[] s = new String[]{"hello","hi"}; Observable observable = Observable.from(s);
或者:
Observable observable = Observable.just("hello","hi","rxjava");
创建完observable和observer后,就是让这两个联系起来,实现订阅:
observable.subscribe(subscriber);
想知道输出结果,就自己去敲一遍吧,以上就是简单的一个实现过程。
rxjava中Action1是rxjava的一个接口,他只有一个方法:call(T param),由于这个方法没有返回值只有一个参数,因此 Action1 可以将 onNext(obj) 和 onError(error) 打包起来传入subscribe() 以实现不完整定义的回调。所以还可以这样实现:
Observable.just("hello","hi","rxjava").subscribe(new Action1<String>() { @Override public void call(String s) { Log.i("-----",s); } });
另外rxjava还能实现线程的控制:
在rxjava中Scheduler来实现线程的转换,Schedulers.io()表示发生在IO线程,Schedulers.newThread()表示开启一个新的线程。rxjava还有一个android专用的线程:AndroidSchedulers.mainThread(),表示发生在android的主线程中。
subscribeOn()表示指定订阅发生的线程,就是subscribe()的线程。
observeOn()表示Subscriber 所运行在的线程。
Observable.just("hello rxjava") .subscribeOn(Schedulers.newThread())//发生在新的线程中 .observeOn(AndroidSchedulers.mainThread())//指定发生在主线程中。 .subscribe(new Action1<String>() { @Override public void call(String s) { Log.i("-----",s); } });
另外rxjava还可以实现类型的转换:
下面实现int类型转换成bitmap类型:
private Bitmap getBitmap(int i) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(),i); return bitmap; } int drawable = R.mipmap.ic_launcher; Observable.just(drawable).map(new Func1<Integer, Bitmap>() { @Override public Bitmap call(Integer integer) { return getBitmap(integer); } }).subscribeOn(Schedulers.newThread())//int转换成bitmap类型发生在新线程中 .observeOn(AndroidSchedulers.mainThread())//图片得展示发生在主线程中 .subscribe(new Action1<Bitmap>() { @Override public void call(Bitmap bitmap) { image.setImageBitmap(bitmap); } });
好啦,就写到这里吧,如果想更好的学习rxjava,建议去看看这篇文章。
0 0
- rxjava 的了解和使用
- Retrofit和Rxjava的简单了解
- RxJava初步了解和在Android中的使用
- 从源码出发了解RxJava的使用(上)
- 从源码出发了解RxJava的使用(中)
- 从源码出发了解RxJava的使用(下)
- RxJava的解析,帮助你了解RxJava
- 简单了解RxJava的源码
- RxJava和Retrofit2.0的结合使用
- 使用Retrofit和RxJava的生命周期管理
- Rxjava 和 Retrofit 的封装使用
- Retrofit和RxJava的结合使用
- Rxjava和EventBus的使用比较
- Rxjava和Retrofit结合使用的案例
- RXJAVA的入门和使用总结
- Retrofit和Rxjava的简单使用
- RxAndroid和RxJava的简单使用
- RxJava的入门和基本使用
- Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
- 采用hudson部署javaWeb项目
- 简单理解JavaSe基础中的内存分析
- JVM中的垃圾收集算法和Heap分区简记
- 安装doctrine
- rxjava 的了解和使用
- hdu 1541 Stars【思维】
- Spring 3实现定时任务
- 【算法】链式前向星的静态链表实现
- html基本语言
- Android开发常用网站汇总
- google perftools分析程序性能
- c++ 获取外网ip地址
- 泰勒展开式