最近研究了下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());
}
...
};
82

被折叠的 条评论
为什么被折叠?



