RxJava 初探
来源:互联网 发布:sql 按月分组统计数据 编辑:程序博客网 时间:2024/05/21 08:55
目录
- 目录
- 入门教程推荐
- RxJava的观察者模式关系
- RxJava 与常规用法简明对比
- 初步使用
- 说点什么吧
- 目录
入门教程推荐
- RxJava、Retrofit
http://www.jianshu.com/p/19cac3c5b106
http://gank.io/post/560e15be2dca930e00da1083
https://gank.io/post/56e80c2c677659311bed9841 -
RxJava 操作符
http://blog.csdn.net/job_hesc/article/details/46242117
https://www.apkdv.com/rxjava-operator-classification/
ReactiveX中文翻译文档(这个特别推荐)
https://mcxiaoke.gitbooks.io/rxdocs/content/index.html
RxJava的观察者模式关系
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
Observer 即观察者,它决定事件触发的时候将有怎样的行为
Observable 即被观察者,它决定什么时候触发事件以及触发怎样的事件
eg.
警察 :观察者小偷 :被观察者
警察已经在小偷住的房间周围布满了监控,监视着小偷(订阅),只要小偷作案了(什么时候触发,触发做什么案件),就会被警察发现,警察就自然会开启抓捕行动(小偷的作案的事件触发了他,将会采取抓捕行动)。
大概就这样。
RxJava 与常规用法简明对比
假设有这样一个需求:界面上有一个自定义的视图 imageCollectorView ,它的作用是显示多张图片,并能使用 addImage(Bitmap) 方法来任意增加显示的图片。现在需要程序将一个给出的目录数组 File[] folders 中每个目录下的 png 图片都加载出来并显示在imageCollectorView 中。需要注意的是,由于读取图片的这一过程较为耗时,需要放在后台执行,而图片的显示则必须在 UI 线程执行。常用的实现方式有多种,其中一种:
new Thread() {@Overridepublic 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() {@Overridepublic void run() {imageCollectorView.addImage(bitmap);} });} } } }}.start();
而如果使用 RxJava ,实现方式是这样的:
Observable.from(folders).flatMap(new Func1<File, Observable<File>>() {@Overridepublic Observable<File> call(File file) {return Observable.from(file.listFiles());}}).filter(new Func1<File, Boolean>() {@Overridepublic Boolean call(File file) {return file.getName().endsWith(".png");}}).map(new Func1<File, Bitmap>() {@Overridepublic Bitmap call(File file) {return getBitmapFromFile(file);}}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Bitmap>() {@Overridepublic void call(Bitmap bitmap) {imageCollectorView.addImage(bitmap);}});
显然,哪个用的爽,只有自己才知道~
初步使用
添加依赖
//rxjava compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0'
打印机个字符串
public class MainActivity extends Activity { private final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建一个观察者 Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { // TODO Auto-generated method stub Log.i(TAG, "Completed"); } @Override public void onError(Throwable arg0) { // TODO Auto-generated method stub Log.i(TAG, "onError"); } @Override public void onNext(String s) { // TODO Auto-generated method stub Log.i(TAG, s); } }; // 使用Observable.create()创建被观察者 Observable observable1 = Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { // TODO Auto-generated method stub subscriber.onNext("Hello"); subscriber.onNext("Wrold"); subscriber.onCompleted(); } }); // 订阅 observable1.subscribe(observer); }}
以上用到的都是rx包里面的,别用错了!!!
运行结果:
这就初步使用到了RxJava
说点什么吧
最近在学习一些听了很久,可就只是听到的时候去搜索一番的知识,例如Retrofit/RxJava/mvp等等。
这里只是在学习Rx的时候,我记录的入门的第一步。接下来会继续上详细学习的笔记,和Demo~
请看下回分解~
- 初探RxJava
- RxJava初探
- RxJava初探
- RxJava初探
- 初探RxJava
- RxJava初探
- RxJava 初探
- RxJava初探
- RxJava初探
- Rxjava、retrofit初探
- Android--RxJava源码初探
- RxJava 初探(一)
- RxJava代码初探(一)
- RxJava源码初探
- Android MVP RxJava 初探
- RxJava & Retrofit 初探
- 初探Okhttp3+Retrofit2+RXJava
- android初探rxjava
- Ubuntu 上查看硬件信息命令
- Android开发/学习-问题汇总
- MySQL学习(三)
- ARM汇编指令MCR/MRC学习
- centos上 CVS安装
- RxJava 初探
- 聚合数据全国天气预报--ajax 通过城市名取数据
- EL与Velocity基本语法总结:
- centos 最小化安装后不能上网的解决办法
- JS用斜率判断鼠标进入DIV四个方向的方法 判断鼠标移入方向
- java命令执行jar包的方式
- Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题
- Webkit的MemoryCache和DiskCache
- Android 开发摆脱数据线 - Android studio 无线调试App