时间:2017年10月16日星期一
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学源码:无
学习源码:https://github.com/zccodere/s...
本门课程的主要内容
RxJava是什么 RxAndroid是什么 RxJava常用操作符(重点、难点) 怎样在项目中使用RxJava和RxAndroid
如何学习RxJava与RxAndroid
总体总体章节,有初步了解 跟着讲解自己动手实际去敲代码 GitHub上RxJava项目Wiki文档 看RxJava相关博客和优秀文章
为什么学RxJava与RxAndroid
RxJava能提高工作效率 RxJava能优雅解决复杂业务场景 RxJava使用越来越流行 RxJava的优秀特性
本门课程能够学到什么
了解什么是响应式编程 了解RxJava和RxAndroid到底是什么 了解RxJava历史来源 清除RxJava与RxAndroid关系 学会在项目中使用RxJava和RxAndroid
相关资源
RxJava英文文档:https://github.com/ReactiveX/RxJava/wiki RxJava中文文档:https://mcxiaoke.gitbooks.io/rxdocs/content/ RxJava经典资料:https://github.com/lzyzsd/Awesome-RxJava1-2 响应式编程
什么是响应式编程
定义:是一种基于异步数据流概念的编程模式 关键概念:事件 使用场景:UI(通用)第二章:基本概述 2-1 RxJava概述
RxJava是什么
异步数据处理库 扩展的观察者模式
RxJava历史来源
Netflix公司遇到问题 目标:重构当前架构来减少REST调用的次数 尝试:微软RX迁移到JVM
RxJava特点
jar包小于1MB 轻量级框架 支持Java8 lambda 支持Java6及Android 2.3以上 支持异步和同步
扩展的观察者模式
onCompleted()事件:通知完毕事件 onError()事件:通知异常事件 使用组合而不是嵌套,避免陷入回调地狱2-2 RxAndroid概述
RxAndroid是什么
是RxJava针对Android平台的一个扩展,用于Android开发 提供响应式扩展组件快速、易于开发Android应用程序
Schedulers(调度器)
解决Android主线程问题:针对Android 解决多线程问题
Schedulers示例
2-3 RxJava扩展观察者模式四大要素
Observable被观察者 Observer观察者 Subscribe订阅 事件
观察者模式图示
RxJava扩展的观察者模式图示
第三章:使用详解 3-1 入门案例创建名为myrxjava的maven工程pom如下
4.0.0 com.myimooc myrxjava 0.0.1-SNAPSHOT jar myrxjava http://maven.apache.org UTF-8 1.8 1.8 1.8 io.reactivex rxjava 1.3.2 junit junit 4.12 test
1.编写HelloWorld类
package com.myimooc.myrxjava; import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; /** * @title HelloWorld类 * @describe 3-1 入门案例HelloWorld * @author zc * @version 1.0 2017-10-16 */ public class HelloWorld { @SuppressWarnings({ "deprecation", "rawtypes", "unchecked" }) public static void main( String[] args ) { // 1.创建被观察者 Observable myObservable = Observable.create(new OnSubscribe3-2 创建操作(){ @Override public void call(Subscriber super String> subscriber) { subscriber.onNext("hello World!"); throw new NullPointerException("出错啦"); } }); // 2.创建观察者 Subscriber mySubscriber = new Subscriber (){ @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext() " + str); } }; // 3.订阅事件 myObservable.subscribe(mySubscriber); } }
操作符的分类
Creating Observables(创建Observable:创建操作) Transforming Observables(转换Observable:转换操作) Filtering Observables(过滤Observable:过滤操作) Combining Observables(组合Observable:组合操作) Error Handling Operators(处理错误)
Creating Observables(创建Observable)
Create Just From Defer Empty/Never/Throw Interval Range Repeat Start Timer
代码编写
1.编写CreatingObservables类
package com.myimooc.myrxjava; import java.util.ArrayList; import java.util.List; import rx.Observable; import rx.Observable.OnSubscribe; import rx.functions.Func0; import rx.Subscriber; /** * @title 创建操作符 * @describe 创建操作符演示 * @author zc * @version 1.0 2017-10-16 */ @SuppressWarnings("unused") public class CreatingObservables { public static void main(String[] args) { // create(); // just(); // from(); // defer(); repeat(); } /** * repeat操作符 */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static void repeat() { Observable observable= Observable.range(1,5).repeat(2); observable.subscribe(new Subscriber3-3 转换操作() { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * range操作符 */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static void range() { Observable observable= Observable.range(1,5); observable.subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } private static String deferStr = "default"; /** * defer操作符 */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static void defer() { Observable observable= Observable.defer(new Func0 >() { @Override public Observable call() { return Observable.just(deferStr); } }); deferStr = "RxJava"; observable.subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext(): " + str); } }); } /** * from操作符 */ private static void from() { List nums = new ArrayList (); nums.add(1); nums.add(2); nums.add(3); nums.add(4); nums.add(5); Observable.from(nums).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * just操作符 */ private static void just() { Observable.just("RxJava").subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext(): " + str); } }); } /** * Create操作符 */ private static void create() { Observable.unsafeCreate(new OnSubscribe (){ @Override public void call(Subscriber super String> subscriber) { subscriber.onNext("RxJava"); } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext(): " + str); } }); } }
Transforming Observables(转换Observable)
Map FlatMap GroupBy Buffer Scan Window
代码编写
1.编写TransformingObservables类
package com.myimooc.myrxjava; import java.util.List; import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.functions.Func1; import rx.functions.Func2; import rx.observables.GroupedObservable; /** * @title 转换操作符 * @describe 转换操作符演示 * @author zc * @version 1.0 2017-10-16 */ @SuppressWarnings("unused") public class TransformingObservables { public static void main(String[] args) { // transformMap(); // transformFlatMap(); // transformGroupBy(); // transformBuffer(); transformScan(); } /** * Scan操作符:对数据进行累加 */ private static void transformScan() { Observable.range(1,5).scan(new Func23-4 过滤操作() { @Override public Integer call(Integer sum, Integer num) { return sum + num; } }).subscribe(new Observer () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Buffer操作符:分批读取数据 */ private static void transformBuffer() { Observable.range(1,5).buffer(2).subscribe(new Observer >() { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(List
str) { System.out.println("onNext(): " + str); } }); } /** * GroupBy操作符:对数据进行分组操作 */ private static void transformGroupBy() { Observable.just(1,2,3,4,5).groupBy(new Func1 (){ @Override public Integer call(Integer data) { return data % 2; } }).subscribe(new Observer >() { @Override public void onCompleted() { } @Override public void onError(Throwable arg0) { } @Override public void onNext(final GroupedObservable groupedObservable) { groupedObservable.subscribe(new Subscriber () { @Override public void onCompleted() { } @Override public void onError(Throwable arg0) { } @Override public void onNext(Integer data) { System.out.println("group:" + groupedObservable.getKey() + " data:" + data); } }); } }); } /** * FlatMap操作符:一个对象转换为多个对象 */ private static void transformFlatMap() { Observable.just(1,2,3,4,5).flatMap(new Func1 >(){ @Override public Observable extends String> call(Integer num) { return Observable.just(String.valueOf(num)); } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext(): " + str); } }); } /** * Map操作符:一个对象转换为另一个对象 */ private static void transformMap() { Observable.just(123).map(new Func1 (){ @Override public String call(Integer num) { return String.valueOf(num); } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(String str) { System.out.println("onNext(): " + str); } }); } }
Filtering Observables(过滤Observable)
Debounce Distinct ElementAt Filter First IgnoreElements Last Sample Skip SkipLast Take TakeLast
代码编写
1.编写FilteringObservables类
package com.myimooc.myrxjava; import java.util.concurrent.TimeUnit; import rx.Observable; import rx.Observable.OnSubscribe; import rx.Observer; import rx.Subscriber; import rx.functions.Func1; import rx.functions.Func2; /** * @title 过滤操作符 * @describe 过滤操作符演示 * @author zc * @version 1.0 2017-10-17 */ @SuppressWarnings("unused") public class FilteringObservables { public static void main(String[] args) { // filterDebounce(); // filterDistinct(); // filterElementAt(); // filterFilter(); // filterIgnoreElements(); // filterLast(); // filterSample(); // filterSkip(); filterTake(); } /** * Take操作符:取对应数据项 */ private static void filterTake() { Observable.just(1,2,3,4).takeLast(2).subscribe(new Subscriber3-5 组合操作() { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Skip操作符:跳过数据项 */ private static void filterSkip() { Observable.just(1,2,3,4).skipLast(2).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Sample操作符:取样 */ private static void filterSample() { Observable.unsafeCreate(new OnSubscribe (){ @Override public void call(Subscriber super Integer> arg) { try{ for (int i=0;i<10;i++){ Thread.sleep(1000); arg.onNext(i); } arg.onCompleted(); }catch (Exception e) { arg.onError(e); } } }).sample(4, TimeUnit.SECONDS).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()" + arg0.getMessage()); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Last操作符:取数据项最后一个数据 */ private static void filterLast() { Observable.just(1,2,3,2,3).last().subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * IgnoreElements操作符:忽略掉指定元素,直接回调onCompleted或onError方法 */ private static void filterIgnoreElements() { Observable.unsafeCreate(new OnSubscribe () { @Override public void call(Subscriber super Integer> arg) { arg.onNext(123); arg.onCompleted(); // throw new NullPointerException(); } }).ignoreElements().subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()" + arg0.getMessage()); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Filter操作符:过滤 */ private static void filterFilter() { Observable.just(1,2,3,2,3).distinct().filter(new Func1 () { @Override public Boolean call(Integer arg) { return arg > 1; } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * ElementAt操作符:取出指定位置的元素 */ private static void filterElementAt() { Observable.just(1,2,3,2,3).elementAt(3).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Distinct操作符:去重操作符 */ private static void filterDistinct() { Observable.just(1,2,3,2,3).distinct().subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * Debounce操作符:在操作后指定时间内无操作时响应 */ private static void filterDebounce() { Observable.unsafeCreate(new OnSubscribe (){ @Override public void call(Subscriber super Integer> arg) { try{ for (int i=0;i<10;i++){ Thread.sleep(2000); arg.onNext(i); } arg.onCompleted(); }catch (Exception e) { arg.onError(e); } } }).debounce(1,TimeUnit.SECONDS).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } }
Combining Observables(组合Observable)
Zip Merge StartWith CombineLatest Join SwitchOnNext
代码编写
1.编写CombiningObservables类
package com.myimooc.myrxjava; import rx.Observable; import rx.Subscriber; import rx.functions.Func2; /** * @title 组合操作符 * @describe 组合操作符演示 * @author zc * @version 1.0 2017-10-17 */ @SuppressWarnings("unused") public class CombiningObservables { public static void main(String[] args) { // combiningZip(); // combiningMerge(); // combiningStartWith(); combiningCombineLatest(); } /** * 用于将两个Observable最近传递的数据通过Func2函数的规则进行组合 */ @SuppressWarnings("static-access") private static void combiningCombineLatest() { Observable3-6 处理错误first = Observable.just(1,3,5); Observable second = Observable.just(2,4,6); first.combineLatest(first,second,new Func2 (){ @Override public Integer call(Integer num1, Integer num2) { System.out.println("num1 = "+num1 + " num2 = "+num2); return num1 + num2; } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * 用于在源Observable传递的数据前增加数据 * 使用startWith(Iterable ),还可以在源Observable传递的数据前增加Iterable */ private static void combiningStartWith() { Observable first = Observable.just(1,3,5); Observable second = Observable.just(2,4,6); first.startWith(second).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * 将两个Observable通知的事件序列合并成一个事件序列,就行是一个Observable通知的一样 * 可以简单的将它理解为两个Observable合并成了一个Observable */ private static void combiningMerge() { Observable observable1 = Observable.just(1,3,5); Observable observable2 = Observable.just(2,4,6); Observable.merge(observable1,observable2).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } /** * 用来合并两个Observable传递的数据项,根据Func2函数生成一个新的值并传递出去 * 当其中一个Observable传递数据结束或者出现异常后,另一个Observable也将停止传递数据 */ private static void combiningZip() { Observable observable1 = Observable.just(10,20,30); Observable observable2 = Observable.just(4,8,12,16); Observable.zip(observable1,observable2, new Func2 (){ @Override public Integer call(Integer integer1, Integer integer2) { return integer1 + integer2; } }).subscribe(new Subscriber () { @Override public void onCompleted() { System.out.println("onCompleted()"); } @Override public void onError(Throwable arg0) { System.out.println("onError()"); } @Override public void onNext(Integer str) { System.out.println("onNext(): " + str); } }); } }
Error Handling Operators(处理错误)
Catch Retry第四章:线程控制 4-1 Java调度器
Schedulers(调度器)
调度器(Schedulers)是RxJava以一种及其简单的方式来解决多线程问题机制
Schedulers(调度器)种类
io() IO相关的操作 这个调度器用于IO操作 computation() 进行计算的操作 这个是计算工作默认的调度器,与IO操作无关 例如:buffer()、debounce()、delay()、interval()、sample()、skip() immediate() 立即执行的操作 这个调度器允许你立即在当前线程执行你指定的工作 例如:timeout()、timeInterval()、timestamp() newThread() 创建一个新的线程 它为指定任务启动一个新的线程 trampoline() 按照顺序进行处理 调度器会按序处理队列,并运行队列中每一个任务 例如:repeat()、retry()4-2 Android调度器
AndroidSchedulers
AndroidSchedulers是RxAndroid库提供在安卓平台的调度器(指定观察者在主线程)
代码示例
4-3 非阻塞IO操作非阻塞IO操作:图片保存
阻塞与非阻塞IO操作比较
4-4 指定线程SubscribeOn
RxJava提供了subscribeOn()方法来用于每个Observable对象
ObserveOn
RxJava提供了observeOn()方法来用于每个Subscriber(Observer)对象
网络请求实例
第五章:课程总结 5-1 课程总结课程总结
理解响应式编程 清楚RxJava和RxAndroid是什么 了解RxJava各种操作符 了解RxJava扩展的观察者模式与一般观察者模式的区别 了解RxJava线程调度器(Schedulers)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67787.html
摘要:入门篇学习总结时间年月日星期三说明本文部分内容均来自慕课网。主要的功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。 《Spring入门篇》学习总结 时间:2017年1月18日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://git...
时间:2018年04月11日星期三 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/zccodere/s... 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 什么是Netty 高性能、事件驱动、异步非阻塞的IO Java开源框架 基于NIO的客户...
摘要:数据绑定入门学习总结时间年月日星期日说明本文部分内容均来自慕课网。慕课网教学示例源码个人学习源码第一章课程介绍数据绑定入门概述数据绑定概念来自百度百科简单绑定是将一个用户界面元素控件的属性绑定到一个类型对象实例上的某个属性的方法。 《SpringMVC数据绑定入门》学习总结 时间:2017年2月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.co...
阅读 2291·2021-11-24 09:39
阅读 3758·2021-11-19 09:40
阅读 2130·2021-09-27 13:36
阅读 1874·2019-08-30 15:44
阅读 375·2019-08-30 13:52
阅读 2689·2019-08-30 11:13
阅读 2119·2019-08-29 16:18
阅读 1739·2019-08-29 15:43