Rxjava 我的读后理解记录
来源:互联网 发布:淘宝手办店哪家到货快 编辑:程序博客网 时间:2024/04/27 18:16
最近研究了下Rxjava。拜读了一篇大牛的分析。没有完全的理解透彻吧。就是记录下了我个人的理解
1. observer (观察者 )
类似
-->onclicklistener
项目中
-->方法 可用于处理 一般 返回的结果 ,主线程更新ui
2. observerable ( 被观察者)
类似
-->view
项目中
--> 用于子线程 访问网络 获取数据 ,而后通知 观察者更新ui
3. subscribe (订阅 用于订阅 观察者 与被观察者的关系 ) 什么时候可以通知观察者更新ui 可以有订阅决定。 observer.subscribe( observerable/subscriber);订阅后。会调用 oberver.call() 方法,call方法里面 进行网络请求等操作,完成后通知 观察者更新ui
handler传递连接
-->setonclicklistener
4. 被观察者 通知观察者相应的call 方法 参数是可以变化的。
5. scheduler 线程控制 真正实现异步操作
两个方法指定观察者 和 被观察者 的线程运行
subscribeOn() 指定被观察者 产生事件 通知观察者响应 的线程 (一般为子线程 )
observerOn() 指定观察者 接收到响应时运行的线程 (一般为主线程 )
6. observerable 的call 方法 也就是创建被观察者的时候 可以进行很多 变化 所以观察者响应,被观察者创建 结合 主要是三种情况
1. 有参数无返回值 (最简单的)
被观察者创建
Observable observable = Observable.create(new Observable.OnSubscribe<String>() { //这样创建的被观察者 参数为string ,观察者的相应方法 参数也是string
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Hi");
subscriber.onNext("Aloha");
subscriber.onCompleted();
}
});
观察者创建
Subscriber<String> subscriber = new Subscriber<String>() {
@Overridepublic void onNext(String s) { // 响应接受String参数Log.d(tag, "Item: " + s);}@Overridepublic void onCompleted() {Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) {Log.d(tag, "Error!");}
};
2.有参数有返回值 ( 变化 ) 这里包涵两种 情况我们分开说下面是 一对一变化
被观察者创建
一个 String 返回一个bitmap 对象
Observable.just("images/logo.png") // 输入类型 String
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String filePath) { // 参数类型 String
return getBitmapFromPath(filePath); // 返回类型 Bitmap
}
})
.subscribe(new Action1<Bitmap>() { //特殊方法相当于观察者响应。
@Override
public void call(Bitmap bitmap) { // 参数类型 Bitmap 接收变化后的bitmap
showBitmap(bitmap);
}
});
3.有参数有返回值(变化) 另一种情况一对多变化 假设 一个string 需要返回多个bitmap(假设需求) 上面这种情况就不适用了
每个学生 有多门课程 需求
Student[] students = ...;
Observable.from(students) 一个学生由多门课程 一对多变化
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCourses());
}
})
.subscribe(subscriber);
Subscriber<Course> subscriber = new Subscriber<Course>() {
@Override
public void onNext(Course course) { // 接收每一个课程
Log.d(tag, course.getName());
}
...
};
1 0
- Rxjava 我的读后理解记录
- 我理解的RxJava
- 我理解的Rxjava
- 我对rxjava的理解
- Rxjava简单理解记录
- 我所理解的RxJava(一)
- 我所理解的RxJava(二)
- 我所理解的RxJava(三)
- 我说理解的Rxjava(1)
- rxjava的错误记录
- RxJava的理解
- 对RxJAVA的理解
- RxJava的flatMap使用记录
- 关于RxJAVA的一下理解
- 理解RxJava的线程模型
- 理解RxJava的线程模型
- 理解RxJava的线程模型
- RxJava Join函数的理解
- canvas 应用实例-我的时钟
- Lua中的闭包2
- PDF文字怎样编辑 如何修改PDF文档
- 传智播客教程中关于finally的讲解
- AngularJS基础知识(三)之——常用指令、过滤器
- Rxjava 我的读后理解记录
- 【Android架构Telephony篇】数据业务(3)RILC
- Swift 中异常抛出和四种异常处理
- 生成XML
- Trafodion 安装教程
- 走到哪都会遇到的面试题
- 保险o2o微服务架构设计
- stm32的启动文件--startup_stm32f10x_hd.s
- Caffe fine-tuning 微调网络