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>() {
    @Override
    public void onNext(String s) { // 响应接受String参数 
        Log.d(tag, "Item: " + s);
    }
    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }
    @Override
    public 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