RxJava2.0 从入门到放弃?
来源:互联网 发布:linux 驱动编写步骤 编辑:程序博客网 时间:2024/05/21 11:30
RxJava2.0 从入门到放弃?
序
我从2016年初的时候听说RxJava,百度搜了一下是什么鬼,有人说搞安卓的2015年没学这个的算是白混了,好吧我的确是白混了,一直计划着要学习如何装逼使用RxJava,然而作为一个懒癌患者,拖到了RxJava2.0出现,纳尼,我特么还没开始学习1.0呢,这就整出了2.0,又落后了。时不我待,重新计划了一次,然并卵。2017年真的不能再拖了,于是决心真的开始搞了,不知道会不会烂尾。(欢迎各大神加群586027808指导批评教育)
- RxJava是什么?(并不是专业回答,我只是吹水)
度娘了一番,是什么,那就是 异步异步异步,简洁简洁简洁
响应式编程
可观测的数据事件流
开始
开始之前,附上官方github地址:
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
gradle引入依赖:
compile ‘io.reactivex.rxjava2:rxjava:2.0.6’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
其实RxJava1.0和2.0是有点区别的,具体什么区别,后续可能会说到,因为我并不会1.0,直接学习2.0,就不在乎什么鬼了,踩到坑再补。
基础
RxJava的几个东西
Observable
Observer
Flowable
Subscriber
饭一口一口吃,先说Observable(被观察者) 和Observer(观察者)
Observable“生产”实体,Observer“消费”实体。
//创建Observable 基本用法1,通过create直接创建 Observable<String> observable=Observable.create(new ObservableOnSubscribe<String>() { //这是一个自定义的数据发射器 @Override public void subscribe(ObservableEmitter<String> e) throws Exception { //每一次调用,都会使observer响应 e.onNext("1"); e.onNext("2"); e.onNext("3"); //onComplete 会使observe回调对应的方法,同理onError e.onComplete(); //在上一行执行了onComplete ,数据依旧会继续发射,但是observe不会进行任何响应 e.onNext("4"); //这里单独说,再一次订阅中,onError和onComplete可以都没有,但是不能都有,是互斥的 //onComplete可以写多次,并不会报错,但从第一次之后发射出去的数据observe都不会响应 //但是onError不能写多次,会在发射过程中直接抛异常 //e.onError(null); //e.onComplete(); } }); //基本用法2 直接发射一组定义好的数据源 //observable=Observable.just("1","2","3","4","5"); ArrayList<String> arrayList=new ArrayList<>(); arrayList.add("1"); arrayList.add("2"); arrayList.add("3"); arrayList.add("4"); //基本用法2 直接发射 //observable=Observable.fromIterable(arrayList); //创建Observer 用于消费数据 Observer<String> observer=new Observer<String>() { @Override public void onSubscribe(Disposable d) { //在接收数据前会执行,Disposable 可用于停止接收数据,但停止接收数据只是让observe不处理 //observable依旧会继续发射数据 } //每一次ObservableEmitter 发射数据时,onNext都会回调,直到onComplete或者onError后 @Override public void onNext(String s) { Log.i("msg",s); } @Override public void onError(Throwable e) { } @Override public void onComplete() { Log.i("msg","onComplete"); } }; //建立订阅关系 只有开始订阅后,observable才会开始发射数据,subscribe有多个重载方法,可以无参纯发射 observable.subscribe(observer);
上面的代码没有任何实际意义,主要是让大家初步理解工作机制,后面再逐步学习操作符,背压,线程调度等
再使用Flowable和Subscriber来个链式装逼写法
//与1.0不同 Flowable是支持背压(这是什么鬼,后面再说,简单来讲就是处理"生产者"产能过剩的问题) Flowable.just(1,2,3,4)//注意这是4个普通的int值 .subscribe(new Subscriber<Integer>() { Subscription sub; //在订阅开始后会先执行这个方法 @Override public void onSubscribe(Subscription s) { Log.i("msg","onSubscribe start"); //sub=s; /**这里要注意,此处的意义是告知Flowable我要多少个数据,如果不写,onNext是不会有 回调的,直到数据发送结束,可以一次性在这说明要多少,也可以只要一个,剩下的可以在 onNext中进行申请,如果申请的数量小于总数,是不会触发最后的onComplete方法的 本例中要触发onComplete,这里就必须要大于等于4 */ s.request(1); Log.i("msg","onSubscribe end"); } @Override public void onNext(Integer integer) { Log.i("msg","onNext "+integer.toString()); //sub.request(1); //可以在此处再次请求释放数据 } @Override public void onError(Throwable t) { } @Override public void onComplete() { Log.i("msg","onComplete"); } });
以上这些….
其实我想盗图来说明点问题的,但是略麻烦,等说明操作符差异的时候再用图解
临时收工 未完待续
- RxJava2.0 从入门到放弃?
- Swift3.0从入门到放弃(一)
- Swift3.0从入门到放弃(二)
- Swift3.0从入门到放弃(三)
- Freemarker 从入门到放弃
- kmp从入门到放弃
- Dagger2从入门到放弃
- 推送 从入门到放弃
- 推送 从入门到放弃
- Python从入门到放弃
- vim从入门到放弃
- JAVA 从入门到放弃?
- markdown从入门到放弃
- Mycat从入门到放弃
- C++从入门到放弃
- Volatile从入门到放弃
- Eslint 从入门到放弃
- c++ 从入门到放弃
- 如何修改solr集合的自动接管参数
- BZOJ 1879 [Sdoi2009] Bill的挑战
- ADO数据库编程入门(下)
- IE下radio的onchange事件焦点移除方可触发问题
- 越长大越向往
- RxJava2.0 从入门到放弃?
- ES5中引入antd表格的使用
- 一次实践:spark查询hive速度缓慢原因分析并以此看到spark基础架构
- Python 多进程和多线程
- Unable to verify your data submission.加入了_csrf也报400错误的解决
- redis漏洞引发的入侵
- Java Socket---一个简单的即时通讯小Demo
- python下使用selenium的坑
- Android Dagger2与ButterKnife冲突问题