解析Rxjava之一---转载自抛物线
来源:互联网 发布:手机拍照后期制作软件 编辑:程序博客网 时间:2024/03/29 10:15
很早之前在‘抛物线’微博中看了一篇关于Rxjava的解析,具体链接没找到。现在是之前摘抄的文章。
1.Rxjava是什么 ---异步
RxJava 在 GitHub主页上的自我介绍是 "a library for composingasynchronous and event-based programs using observable sequences for the JavaVM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava,概括得非常精准。
1.1 Rxjavad的好处
都是做异步,为什么要舍弃之前的AsyncTask,handler...而使用Rxjava呢?因为逻辑简单
例如原博客中举的例子:
界面上有一个自定义的视图 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); } });
这种链式的方式比上面那种逻辑简单多了,就是一个一个方法罗列起来实现了上面那种需求。
另外,如果你的 IDE是 Android Studio,其实每次打开某个 Java文件的时候,你会看到被自动 Lambda化的预览,这将让你更加清晰地看到程序逻辑:
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) });
2.API介绍和原理简析
从上面可以看出,Rxjava是基于一个Observable的。
这是因为Rxjava就是通过观察者模式来实现的。
原博客中也给出了观察者模式的概念:是对象与对象之间的某种高度敏感,一个对象需要在另一个对象变化的瞬间做出反应。
- 解析Rxjava之一---转载自抛物线
- RxJava之一
- rxjava转载
- RxJava系列之一 初识Rxjava
- RXJava 解析
- Rxjava解析
- 抛物线
- 抛物线
- 抛物线
- [脚本] 转载一个抛物线的代码
- (抛物线)给 Android 开发者的 RxJava 详解
- Android - Rerofit-RxJava(转载)
- Android RxJava (转载)
- RxJAVA转载 作者:扔物线
- RxJava系列之一:观察者模式
- 函数调用约定解析 转载自:http://www.allaboutprogram.com
- RXjava observeOn subscribeOn 解析
- RxJava详细解析
- Linux基本的架站流程表
- 如何将我的php脚本以守护进程的方式一直运行
- 创建Notification
- 12V85V 降压恒流led驱动方案
- Leetcode 42. Trapping Rain Water
- 解析Rxjava之一---转载自抛物线
- 写入word
- windows上Apache+tomcat实现主备机服务器
- android 尺寸
- IEEE 802.15.4协议完整中文版 - 5.1.2.1 扫描信道
- HIVE 笔记
- 为Elasticsearch安装中文分词IK
- IntentFilter 匹配规则(网页中启动Activity)
- webmatrix