热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

RxJava2配置及使用详解

这篇文章主要介绍了RxJava2配置及使用详解,RxJava2.0是一个非常棒的流式编程,有兴趣的可以了解一下

RxJava2.0是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.

依赖:

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

简单使用:

//观察者模式,这里产生事件,事件产生后发送给接受者,但是一定要记得将事件的产生者和接收者捆绑在一起,否则会出现错误
Observable.create(new ObservableOnSubscribe() {
  @Override
  public void subscribe(ObservableEmitter e) throws Exception {
    //这里调用的方法会在产生事件之后会发送给接收者,接收者对应方法会收到
    e.onNext("hahaha");
    e.onError(new Exception("wulala"));
    e.onComplete();
  }/*--
}).subscribe(new Observer() {
  //接受者,根据事件产生者产生的事件调用不同方法
  @Override
  public void onSubscribe(Disposable d) {
    Log.e(TAG, "onSubscribe: ");
  }

  @Override
  public void onNext(String value) {
    Log.e(TAG, "onNext: " + value);
  }

  @Override
  public void onError(Throwable e) {
    Log.e(TAG, "onError: ", e);
  }

  @Override
  public void onComplete() {
    Log.e(TAG, "onComplete: ");
  }
});

我们来用图解一下这其中发生了什么事:


上游朝下游发送数据,经过subscribe使上下游产生关系,即达成订阅.

解析1:

ObservableEmitter,这是个啥东西?Emitter:顾名思义,即Rxjava的发射器,通过这个发射器,即可发送事件-----通过调用onNext,onError,onComplete方法发送不同事件.

注意:

虽然RxJava可以进行事件发送,但这并不意味着你可以随便发送,这其中需要遵循一些规则.

onNext:你可以发送无数个onNext,发送的每个onNext接受者都会接收到.

onError:当发送了onError事件之后,发送者onError之后的事件依旧会继续发送,但是接收者当接收到onError之后就会停止接收事件了.

onComplete:当发送了onComplete事件之后,发送者的onComplete之后的事件依旧会继续发送,但是接收者接收到onComplete之后就停止接收事件了.

onError事件和onComplete事件是互斥的,但是这并不代表你配置了多个onError和onComplete一定会崩溃,多个onComplete是可以正常运行的,但是只会接收到第一个,之后的就不会再接收到了,多个onError时,只会接收到第一个,第二个会直接造成程序崩溃. 

解析2:

Disposable又是个啥东西,翻译之后百度告诉我这东西叫做一次性的,是用来控制发送者和接受者之间的纽带的,默认为false,表示发送者和接受者直接的通信阀门关闭,可以正常通信,在调用dispose()方法之后,阀门开启,会阻断发送者和接收者之间的通信,从而断开连接.

重载方法:

     subscribe();     //表示发送者随意发送数据,接受者什么都不管,什么都不接收.
     subscribe(Consumer<&#63; super T> onNext) {}   //只响应onNext()事件,其他的事件忽略.
     subscribe(Consumer<&#63; super T> onNext, Consumer<&#63; super Throwable> onError) {}     //含义同上
     subscribe(Consumer<&#63; super T> onNext, Consumer<&#63; super Throwable> onError, Action onComplete) {}     //含义同上
     subscribe(Consumer<&#63; super T> onNext, Consumer<&#63; super Throwable> onError, Action onComplete, Consumer<&#63; super Disposable> onSubscribe) {}   //含义同上

解析3:

默认情况下,发送者和接收者都运行在主线程,但是这显然是不符合实际需求的,我们在日常使用中,通常用的最多的就是在子线程进行各种耗时操作,然后发送到主线程进行,难道我们就没有办法继续用这个优秀的库了&#63;想多了你,一个优秀的库如果连这都想不到,怎么能被称为优秀呢,RxJava中有线程调度器,通过线程调度器,我们可以很简单的实现这种效果,下面放代码.

Observable.create(new ObservableOnSubscribe() {
  @Override
  public void subscribe(ObservableEmitter e) throws Exception {
    e.onNext("hahaha");
    e.onNext("hahaha");
    e.onNext("hahaha");
    Log.e(TAG,"运行在什么线程" + Thread.currentThread().getName());
    e.onComplete();
  }
}).subscribeOn(Schedulers.newThread())        //线程调度器,将发送者运行在子线程
 .observeOn(AndroidSchedulers.mainThread())     //接受者运行在主线程
 .subscribe(new Observer() {
  @Override
  public void onSubscribe(Disposable d) {
    Log.e(TAG, "onSubscribe: ");
    Log.e(TAG,"接收在什么线程" + Thread.currentThread().getName());
  }

  @Override
  public void onNext(String value) {
    Log.e(TAG, "onNext: " + value);
  }

  @Override
  public void onError(Throwable e) {
    Log.e(TAG, "onError: ", e);
  }

  @Override
  public void onComplete() {
    Log.e(TAG, "onComplete: ");
  }
});

最终结果:


可以看到我们只加了两行代码,就实现了效果,还有比这个更优秀,更简单的么&#63;

注意事项:

subscribeOn(),只有在第一次调用的时候生效,之后不管调用多少次,只会以第一次为准.

observeOn(),可以被调用多次,每次调用都会更改线程.

RxJava线程池中的几个线程选项

  1.  - Schedulers.io()      io操作的线程, 通常io操作,如文件读写.
  2.  - Schedulers.computation()      计算线程,适合高计算,数据量高的操作.
  3.  - Schedulers.newThread()      创建一个新线程,适合子线程操作.
  4. - AndroidSchedulers.mainThread()      Android的主线程,主线程

本文介绍简单使用,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 【影评】大内密探灵灵狗
    本文是对王晶执导的电影《大内密探灵灵狗》进行的影评。文章称赞了王晶的才华和导演经验,认为演员阵容强大,笑料不少,发明新奇又好笑。然而,编剧的表现被认为是本片的最大失败,宣传言过其实,笑点不多。总体来说,本片是一部典型的王式喜剧,可看性较高,但没有突破。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
author-avatar
mobiledu2502871653
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有