RxJava初探

xiaoxiao2021-02-28  50

公司框架要用到RxJava,以前没怎么用过这个,乘着现在用到,默默的研究下这玩意儿

RxJava 什么是rxJava 在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 rxJava的好处 随着程序逻辑越来越复杂,代码依然很清晰 rxJava的基本原理 rxJava实现异步,是通过扩展观察者模式来实现的 rxJava观察者模式 通过subscrib实现订阅的关系,在observable需要的时候,发送通知给observer observable(可观察者、被观察者)observer(观察者)subscrib(订阅)observable和observer rxJava基本实现 创建observer Observer<String>observer=new Observer<String>() {                                 @Override                 public void onCompleted() {                 }                                 @Override                 public void onError(Throwable e) {                 }                                 @Override                 public void onNext(String s) {                 }             }; //subscriber             Subscriber<String>subscriber=new Subscriber<String>() {                @Override                 public void onCompleted() {                 }                                 @Override                 public void onError(Throwable e) {                 }                                @Override                 public void onNext(String s) {                 }             }; ​​ 创建observable //observable Observable<String>observable=Observable.create(new Observable.OnSubscribe<String>() {                @Override                 public void call(Subscriber<? super String> subscriber) {                 }             }); subscrib订阅 observable.subscribe(observer);observable.subscribe(subscriber); 线程控制Scheduler Observable.just(1,2,3,4)                     .subscribeOn(Schedulers.io())//指定 subscribe() 事件产生发生在 IO 线程                     .observeOn(AndroidSchedulers.mainThread())//指定 Subscriber 消费事件的回调发生在主线程                     .subscribe(new Action1<Integer>() {                         @Override                                                 public void call(Integer integer) {                         }                     }); Schedulers.immediate() 直接在当前线程中使用,即,不指定线程,默认就是这个值 Schedulers.newThread() 总是启用一个新的线程,并在新的线程中运行 Schedulers.IO() IO操作所使用的线程(读写文件、数据库操作、网络操作等) io线程和newThread线程差不多,区别在于,io线程是一个没有上线的线程池,很好的维护了创建的线程,可以复用空闲的线程。所以正常情况下,io线程要比newThread线程要好一些 ​ AndroidSchedulers.mainThread() 这是android专用的主线程 变换 在事件运行的过程中,对事件传递对象进行加工和变化成另外一个对象 map 将string类型直接转化为bitmap对象 Observable.just("/image/1.png")//这是一个图片途径              .map(new Func1<String, Bitmap>() {                                  @Override                  public Bitmap call(String path) {                                       return getBitmapFromPath(path);//通过路径返回bitmap                  }              })          .subscribe(new Action1<Bitmap>() {                            @Override              public void call(Bitmap bitmap) { //             imageView.setImageBitmap(bitmap);//得到bitmap之后的处理              }          }); ​flatMap() Observable.from(students)                   .flatMap(new Func1<Student, Observable<Course>>() {                       @Override                                             public Observable<Course> call(Student student) {//将student中的课程转化为一个Observable<Course>                           return Observable.from(student.getCourses());                       }                   })           .subscribe(new Action1<Course>() {               @Override                              public void call(Course course) {//将course名字打印                   Log.e("courseName",course.getCourseName());               }           }); 可以看出flatMap和map有一个共同点,就是将传入的对象转化为另一个对象并返回,但是不同的是,flatMap返回的是一个observable对象,并且这个对象不是直接返回到subscriber的回调对象中 ​ #来自 : https://mp.weixin.qq.com/s?__biz=MzI3OTU0MzI4MQ==&mid=100000840&idx=1&sn=518710b005801f244d704762f5020400&chksm=6b4768d65c30e1c03fb1100dda0c6d0b2047f57c35701f08237bf1813689c25027c5ec9df142#rd

转载请注明原文地址: https://www.6miu.com/read-83582.html

最新回复(0)