一.Rxjava跟EventBus的区别

  RxJava 是一个响应式编程框架,通过一种扩展的观察者设计模式来实现异步操作。 跟AsyncTask和Handler类似,但是比AsyncTask和Handler更加简洁随着程序逻辑变得越来越复杂,它依然能够保持逻辑的简洁。另外还可以自己封装一个RxBus进行消息事件的传递,有人可能会问这些功能EventBus也能够做,那么为什么还需要Rxjava呢?RxJava 主要做异步、网络的数据处理;它的优 点在于它的异步操作的链式调用,这样使代码逻辑更加清晰,另外它可以利用操作符对发出的消息进行一系列的变换,这个EventBus是办不到的,另外Rxjava没法做到EventBus的设置优先级和消息拦截(可能是我没找到);EventBus的优点在于消息/事件的传递,如果要它做异步任务操作话就感觉代码有点乱入感;Rxjava更加强大吧,还可以结合Retrofit一起使用

二.RxJava详解

  Observable(被观察者)和Subscriber(订阅者,观察者)是两个主要的类,Rxjava中,一个Observable是一个发出数据或者事件的类,Subscriber是一个对这些发出数据或者事件进行行动的类;一个 Observable(被观察者)可以有多个 Subscribers(订阅者,观察者),并且通过 Observable发出的每一个事件或数据,该事件或数据将会被发送到Subscriber.onNext() 方法来进行处理。一旦 Observable 不再发出事件或数据,它将会调用Subscriber.onCompleted()方法,或如果有一个出错的话Observable 会调用 Subscriber.onError() 方法。在一个正确运行的事件序列中,onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

三.RxJava的使用

1.依赖

compile 'io.reactivex:rxjava:1.2.0'
compile 'io.reactivex:rxandroid:1.2.1'

2.创建Subscriber(Observer)

 Subscriber<String> mSubScribler = new Subscriber<String>() {
@Override
public void onCompleted() {
Log.i(TAG, "onCompleted: ");
} @Override
public void onError(Throwable e) {
Log.i(TAG, "onError: " + e.getMessage());
} @Override
public void onNext(String s) {
Log.i(TAG, "onNext: " + s);
}
};

推荐使用Subscriber,实际上RxJava在subscibe过程中,会先将Observer转换为一个Subscriber。

3.创建被观察者Observable

 Observable mObservable=Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
//Subscriber将会被调用三次 onNext()和一次 onCompleted())。这样,
//由被观察者调用了观察者的回调方法,就实现了由被观察者向观察者的事件传递,即观察者模式。
subscriber.onNext("hi");
subscriber.onNext("hello");
subscriber.onNext("myname");
subscriber.onCompleted();
}
});

快捷创建Observable的两种方法:

Observable mObservable=Observable.just("hi","hello","myname");

String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);

4.订阅

//创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来
//被观察者订阅观察者
Subscription ubscribe=mObservable.subscribe(mSubscriber);

5.取消订阅

@Override
protected void onDestroy() {
//取消订阅,释放内存,避免内存泄漏
ubscribe.unsubscribe();
super.onDestroy();
}

6.简洁的写法

 String[] word= new String[]{"hello", "world", "chinses"};
Observable.from(word).subscribe(
new Action1<String>() {
@Override
public void call(String s) {
//Action1<String>相当于Subscriber的onNext(String s)
Log.i(TAG, "call: " + s);
}
},new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
// Action1<Throwable>相当于Subscriber的onError(Throwable e)
Log.i(TAG, "call: "+throwable.getMessage());
}
}, new Action0() {
@Override
public void call() {
//Action0相当于Subscriber的onCompleted()
Log.i(TAG, "call: onCompleted");
}
});

基础的使用差不多就这么多,另外我们需要明白两点:

1.Observable和Subscriber可以做任何事情
      Observable可以是一个数据库查询,Subscriber用来显示查询结果(传递数据);Observable可以是屏幕上的点击事件,
Subscriber用来响应点击事件(传递事件);Observable可以是一个网络请求,Subscriber用来显示请求结果。
     
2.Observable和Subscriber是独立于中间的变换过程的。
     在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程

Rxjava学习(一基础篇)的更多相关文章

  1. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  2. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  3. Python3学习(1)-基础篇

    Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...

  4. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  5. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

  6. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  7. Java学习路线-基础篇!

    下面以黑马程序员Java学院的学习路线为例,进行一次史无前例的剖析,我会采取连载的形式,细致的讲解零基础的人怎么学习Java.先看下Java在基础阶段的知识点路线图. 内容多吗?不要被吓到了,知识点剖 ...

  8. 一步步学习javascript基础篇(8):细说事件

    终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...

  9. 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)

    上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...

随机推荐

  1. gradle 打包 jar (一波三折)

    第一次尝试,打包成功,运行失败 build.gradle 打包 jar { baseName 'testJar' from { //添加依懒到打包文件 //configurations.compile ...

  2. linux安装使用xdebug

    我还是来给大家一个正确的配方,每个人的php版本不一样 所以下载的xdebug应该是不一样的 1,https://xdebug.org/wizard.php   进入这个网页 把自己phpinfo的信 ...

  3. 四大组件之Activity Task任务栈4种启动模式

    1.启动模式 standard,创建一个新的Activity. singleTop,栈顶不是该类型的Activity,创建一个新的Activity.否则,onNewIntent. singleTask ...

  4. transition过渡效果

    语法:transition: property duration timing-function delay; transition-property 规定设置过渡效果的 CSS 属性的名称.tran ...

  5. mysql中sql中的注释

    学习mysql好久了,oracle也是,但是经常使用oracle,有一天突然想,oracle的sql语法中有注释,那么mysql中是不是也有注释,于是从网上搜了一下,原来mysql中的注释还真不少,下 ...

  6. Python制作回合制手游外挂简单教程(中)

    接着上篇的博文,今天我们讲如何实现自动组队刷道 引入: 自动组队刷道的流程是先点击刷道按钮.再点击前往按钮.再点击便捷组队······ 这些操作上篇博文已经告诉我们怎么做了,利用picpick丈量坐标 ...

  7. Android中数据的保存

    1. 概述 在Android中有以下几种保存数据方式: 1). 使用sharedPreference去保存:只有应用程序自己可以访问 2). 保存在应用程序私有的文件夹下:只有应用程序自己可以访问 3 ...

  8. webpack初识!

    最近在使用webpack 感觉棒棒哒 下面这个简单的教程可以让你走入webpack的世界 欢迎使用webpack 这个小教程通过简单的例子来引导大家使用webpack 通过这些这篇文章你可以学到 如何 ...

  9. iOS开源项目周报0209

    由OpenDigg 出品的iOS开源项目周报第七期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等.Hedwig 向 ...

  10. PHP项目学习1

    最近在学习PHP,看了<轻松学PHP>,2天看完,学习了很多基础知识,可是没有出什么成果.然后看<PHP项目开发全程实录>,里面讲到一个online影视365网,刚好有一个朋友 ...