Rxjava简单理解
来源:互联网 发布:python擅长做什么知乎 编辑:程序博客网 时间:2024/06/05 03:20
一:参考文章:http://gank.io/post/560e15be2dca930e00da1083
二:Rxjava定义(Github):一个在java VM上使用可观测的序列来组成异步的基于事件的程序的库。
三:Rxjava原理:观察者模式:创建Observer(观察者),创建Observable(被观察者),订阅(Subscribe)。
四:优点:代码简洁明了,可扩展性强。
使用举列:
假设有这样一个需求:界面上有一个自定义的视图 imageCollectorView ,它的作用是显示多张图片,并能使用 addImage(Bitmap) 方法来任意增加显示的图片。现在需要程序将一个给出的目录数组 File[] folders 中每个目录下的 png 图片都加载出来并显示在 imageCollectorView 中。需要注意的是,由于读取图片的这一过程较为耗时,需要放在后台执行,而图片的显示则必须在 UI 线程执行。常用的实现方式有多种,我这里贴出其中一种:
new Thread() { @Override public void run() { super.run(); for (File folder : folders) { File[] files = folder.listFiles(); for (File file : files) { if (file.getName().endsWith(".png")) { final Bitmap bitmap = getBitmapFromFile(file); getActivity().runOnUiThread(new Runnable() { @Override public void run() { imageCollectorView.addImage(bitmap); } }); } } } }}.start();
使用Rxjava写法是这样:
Observable.from(folders) .flatMap(new Func1<File, Observable<File>>() { @Override public Observable<File> call(File file) { return Observable.from(file.listFiles()); } }) .filter(new Func1<File, Boolean>() { @Override public Boolean call(File file) { return file.getName().endsWith(".png"); } }) .map(new Func1<File, Bitmap>() { @Override public Bitmap call(File file) { return getBitmapFromFile(file); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Bitmap>() { @Override public void call(Bitmap bitmap) { imageCollectorView.addImage(bitmap); } });
android studio代码对齐后为这样:
Observable.from(folders) .flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) }) .filter((Func1) (file) -> { file.getName().endsWith(".png") }) .map((Func1) (file) -> { getBitmapFromFile(file) }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });
代码可以简洁,易扩展
五:Rxjava如何达到简洁?如何实现异步处理,或者说Rxjava原理
Rxjava通过观察者模式处理:
如,警察与小偷的故事。而程序中警察不需要时刻盯着小偷,而是采用了注册(Register)或者订阅(Subscribe)的方式,来告诉观察者。
六:Rxjaca回调事件:
1.onNext()。相当于onClick()/onEvent()。
2.onCompleted().
3.onError()。
End,粗略的理解下Rxjava。
- Rxjava简单理解
- Rxjava简单理解记录
- RxJava+Retrofit 简单理解实现
- Rxjava 理解
- 我理解的RxJava
- RxJava的理解
- 理解 RxJava 线程模型
- RxJava学习理解
- Rxjava初理解
- 对RxJAVA的理解
- Rxjava初步理解
- Rxjava浅理解
- 我理解的Rxjava
- Rxjava简单学习
- RxJava的简单应用
- Retrofit+RxJava 简单学习
- Rxjava+Retrofit 简单使用
- retrofit2+RxJava简单使用
- 颠覆想象,一盏夜灯的变革
- android 透明度颜色
- 系统编程中的文件大小修改truncate/lseek
- c语言中语句srand(time(NULL))什么意思。
- Spring boot发布成war包,可部署到tomcat
- Rxjava简单理解
- 【1096】[ZJOI2007]仓库建设
- navicat如何让datetime类型自动获取当前时间
- Docker学习文档之三 其他相关-生产环境
- 剑指offer:(3)单链表:从尾到头打印链表
- 1031-查验身份证
- zoj——某年某月某日到某年某月某日中9的个数
- 利用闲置硬盘建立简单的家用NAS--之筹备篇
- Unity 协程运行时的监控和优化