公司框架要用到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
