RxJava
Luckie stone
Android应用开发。
展开
-
RxJava2 / RxAndroid2操作符interval:每隔若干时间发射信号
Interval每隔一定时间发射一个整数,从0开始,例如:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log...转载 2019-06-21 06:29:44 · 1445 阅读 · 0 评论 -
RxJava(六)变换操作符
变换操作符private void RxJava1() { ObservableSource<T> 另一个Observable; Predicate<T> 条件; prefetch 预取量; maxConcurrency 最大并发数; //observeOn : 指定观察者观察Obse...转载 2019-06-20 06:26:49 · 385 阅读 · 0 评论 -
RxJava2(五)线程调度器Scheduler
线程调度器SchedulerRxJava是一个为异步编程而实现的库,但异步也存在线程安全问题,比如,那些操作需要在前台线程,那些操作又需要在后台线程等等。而Scheduler就是这样一个线程调度器,可以在线程间来回切换。理想的操作是Observable发射数据流,操作符在后台线程处理数据,Obverser在前台线程接受并响应数据。Scheduler可调度的线程有:· single:定长为1...转载 2019-06-20 06:26:41 · 1060 阅读 · 0 评论 -
RxJava2(四)创建操作符
创建被观察者的操作符创建操作符:private void RxJava2() { ObservableSource<T> :Observable数据; Ierable<T> :集合; Array[] :数组; Fruture<T> :有返回值的Callable; Cal...转载 2019-06-20 06:26:32 · 307 阅读 · 0 评论 -
RxJava2(三)Subject和Processor
一, Subject它既是一个Observable可不断调用onNext发射数据,直到遇到onComplete结束,又是一个Observer可订阅数据。它可以将订阅的数据作为自己的数据发射出去。包含4种类型:AsyncSubject,BehaviorSubject,ReplaySubject,PublishSubject。AsyncSubject观察者/订阅者只会接受到onComple...转载 2019-06-20 06:26:24 · 591 阅读 · 0 评论 -
RxJava2(二)五种被观察者
五种被观察者为Observable,Flowable,Single,Completable,Maybe。五种被观察者可通过toObservable,toFlowable,toSingle,toCompletable,toMaybe相互转换Observable一简介1.Observable即被观察者,决定什么时候触发事件以及触发怎样的事件。2.Oberver即观察者,他可以在不同的线程中...转载 2019-06-20 06:25:08 · 555 阅读 · 0 评论 -
RxJava2(一)完整生命周期
简介:1.RxJava用于通过使用被观察者Obverserable/Flowable序列来构建异步和基于事件的库。2.RxJava支持Java5之后版本,还支持跑在JVM上的各种语言。3.RxJava可以用在Android开发的任何地方,包括App所依赖的底层框架。4.导入依赖:implementation "io.reactivex.rxjava2:rxjava:2.2.3"im...转载 2019-06-20 06:24:54 · 618 阅读 · 0 评论 -
RxJava(十五)RxJava线程的自由切换
在Android使用RxJava的时候可能需要频繁的进行线程的切换,如耗时操作放在子线程中执行,执行完后在主线程渲染界面。如下面示例代码:deferObservable(new Callable<String>() { @Override public String call() throws Exception { ...转载 2019-06-19 06:26:26 · 1385 阅读 · 0 评论 -
RxJava(十四)interval、takeWhile操作符实现获取验证码功能
现在主流的App中,使用手机验证码的场景越来越多,比如验证码登陆、验证码重置/找回密码等。一般功能流程如下:1,防止获取验证码按钮在短时间内被点击多次2,调用获取验证码接口(提示loading,防止界面被操作)3,验证码获取成功开始倒计时,此时按钮不可被点击4,倒计时完毕后,点击可以再次被点击在Android中实现该功能的方案也有很多,比如Timer、CountDownTim...转载 2019-06-19 06:26:17 · 1256 阅读 · 0 评论 -
RxJava(十三)RxJava导致Fragment Activity内存泄漏问题
一般我们在实际的开发中,RxJava和Retrofit2结合使用的比较多,因为他们可以无缝集成,例如我们下面的一个网络请求:public interface OtherApi { @GET("/timeout") Observable<Response> testTimeout(@Query("timeout") String timeout);}priv...转载 2019-06-19 06:26:09 · 946 阅读 · 0 评论 -
RxJava(十二)combineLatest操作符的高级使用
combineLatest 操作符用来将多个Observable发射的数据组装起来然后在发射. 通过Func类来组装多个Observable发射的数据, 等到最后一个Observable发射数据了, 然后把所有发射的数据交给Fun进行组合, 然后把组合后的数据发射出去.看到网上绝大部分都是用 combineLatest 来做Android表单的校验, 总感觉有点大材小用. 如只有表单都只有值了...转载 2019-06-19 06:25:57 · 4923 阅读 · 0 评论 -
RxJava(十一)defer操作符实现代码支持链式调用
一、前言现在越来越多Android开发者使用到RxJava,在Android使用RxJava主要有如下好处:1,轻松切换线程。以前我们切换线程主要使用Handler等手段来做。2,轻松解决回调的嵌套问题。现在的app业务逻辑越来越复杂,多的时候3,4层回调嵌套,使得代码可维护性变得很差。RxJava链式调用使得这些调用变得扁平化。随着RxJava的流行,越来越多的开源项目开始支持RxJa...转载 2019-06-19 06:25:48 · 164 阅读 · 0 评论 -
RxJava(七)背压Flowable
RxJava背压Flowable1.背压:在RxJava的异步场景中,被观察者发送数据太快,以至于操作符和订阅者来不及处理数据,造成buffer溢出。2.Flowable:RxJava中专门用来支持背压,默认队列大小128,所有操作符强制支持背压。3.背压策略:public enum BackpressureStrategy{ MISSING, //通过creat...转载 2019-06-20 06:26:57 · 1928 阅读 · 0 评论 -
RxJava(八)Disposable和Transformer
Disposable和Transformer一,Disposable1.当Observable发送数据,Observer订阅数据时,就形成一个Disposable,可用于在退出时取消订阅。Disposable disposable = Observable.just(1,2,3) .subscribeOn(Schedulers.newThread()) ...转载 2019-06-20 06:27:05 · 800 阅读 · 0 评论 -
RxJava2 / RxAndroid2操作符distinct与distinctUntilChanged去重结果异同
代码例如:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import io.reactivex.O...转载 2019-06-21 06:28:47 · 329 阅读 · 0 评论 -
RxJava2 / RxAndroid2操作符ofType:根据类型选择输出结果
例如:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import io.reactivex.Obs...转载 2019-06-21 06:28:26 · 199 阅读 · 0 评论 -
RxJava2 / RxAndroid2操作符distinct去重
distinct去除重复的数据,例如:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import ...转载 2019-06-21 06:27:51 · 825 阅读 · 0 评论 -
RxJava2 / RxAndroid2操作符skip
顾名思义,skip跳过,例如:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import io.r...转载 2019-06-21 06:26:26 · 199 阅读 · 0 评论 -
RxAndroid2 / RxJava2简单的CompletableObserver
CompletableObserver简单的用法跟踪一个任务的结束,不处理复杂的数据传导,例如:import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;...转载 2019-06-21 06:25:56 · 857 阅读 · 0 评论 -
RxJava2 / RxAndroid2的过滤器filter
filter完成一个条件过滤和筛选,从Observable的输出数据中,经过filter筛选一层,如果filter判断的值为真,则交给观察者,否则跳过,例如代码:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.suppor...转载 2019-06-21 06:23:54 · 610 阅读 · 0 评论 -
RxJava2 / RxAndroid2操作符take
take操作获取一系列Observable输出结果的之前的数据作为最终输出,以后的不予处理,例如代码:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;im...转载 2019-06-21 06:22:19 · 621 阅读 · 0 评论 -
RxJava2 / RxAndroid2的concat拼接多个Observable
concat操作符和merge类似,把多个Observable拼接成一个可以观察的输出,例如代码:package zhangphil.app;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import and...转载 2019-06-21 06:20:43 · 830 阅读 · 0 评论 -
RxJava2 / RxAndroid2的merge操作合并多个Observable
RxAndroid2/RxJava2的merge操作合并若干个Observable为单个可观测的Observable,形成单一线性的Observable输出结果,例如代码:package zhangphil.app;import android.os.Bundle;import android.support.annotation.NonNull;import android.su...转载 2019-06-21 06:17:44 · 1623 阅读 · 0 评论 -
RxJava2 / RxJava2操作符scan
scan操作符将Observable的结果在BiFunction扫描一遍后交给Observer使用,scan最大的功用是在BiFunction里面的apply里面做一次计算,有条件、有筛选的输出最终结果,例如代码例子:package zhangphil.app;import android.os.Bundle;import android.support.annotation.Nul...转载 2019-06-20 06:27:35 · 151 阅读 · 0 评论 -
RxJava(九)并行编程
RxJava的并行编程RxJava发射的数据流虽然经过各种变换,切换线程,但并没有产生并行效果。并行:多个处理器或多核处理器同时处理多个任务。并发:单个处理器同时处理多个任务。1.Java8并行流 集合上调用parallelStream @TargetApi(24) private void parallelStream(){ mList.paralle...转载 2019-06-20 06:27:19 · 881 阅读 · 0 评论 -
RxJava(十)switchIfEmpty操作符实现Android检查本地缓存逻辑判断
switchIfEmpty(Observable emptyObservable)操作符从字面意思上就很好理解,就是当为空的时候跳转到emptyObservable。那么如何理解当为空的时候. 下面将会使用实际案例解释这个switchIfEmpty的使用方法。一、业务需求假如我们的app里有加载文章列表功能,要求加载的逻辑如下:加载文章的的时候,先从本地加载,如果本地存在就是用本地的数据,...转载 2019-06-19 06:25:41 · 1668 阅读 · 0 评论 -
RxJava(九)zip操作符在Android中的实际使用场景
一、zip操作符概述官方文档描述:Returns an Observable that emits the results of a specified combiner function applied to combinations of two items emitted,in sequence, by two other Observables.流程图:简单来说zip操...转载 2019-06-18 06:56:07 · 425 阅读 · 0 评论 -
Rxjava2入门教程一:函数响应式编程及概述
如需下载源码,请访问https://github.com/fengchuanfang/Rxjava2TutorialRxJava是函数响应式编程思想在java语言上的具体实现。RxJava2在这一实现下,对Rxjava1进行了全面重写,如果之前没接触过RxJava,可以直接从Rxjava2入门,而不需要了解RxJava1。在使用RxJava2之前,对于Android开发,需要在项目中添加...转载 2019-03-03 17:48:10 · 433 阅读 · 0 评论 -
RxJava进阶四(组合类操作符)
前言本篇文章带着大家熟悉一下RxJava的组合类操作符,本系列文章仅是带大家认识一下这些操作符的用法,并没有对操作符进行多种形态的使用,具体的还需要大家在使用时注意~操作符总览CombineLatest、Join、Merge、StartWith、Switch、Zip…具体使用介绍CombineLatest当两个Observables中的任何一个发射了一个数据时,将两个Obs...转载 2018-07-25 06:08:02 · 157 阅读 · 0 评论 -
RxJava进阶三(过滤类操作符)
前言上篇文章我们了解了RXJava的转换类操作符,本篇文章带着大家熟悉一下RxJava的过滤类操作符,本系列文章仅是带大家认识一下这些操作符的用法,并没有对操作符进行多种形态的使用,具体的还需要大家在使用时注意~操作符总览Debounce、Distinct、ElementAt、Filter、First、IgnoreElements、Last、Sample、Skip、SkipLast、T...转载 2018-07-24 06:35:21 · 117 阅读 · 0 评论 -
RxJava进阶二(转换类操作符)
前言前面我们了解了RXJava的创建类操作符,这篇文章带着大家熟悉一下RxJava的转换类操作符,本系列文章仅是带大家认识一下这些操作符的用法,并没有对操作符进行多种形态的使用,具体的还要大家在使用时注意~操作符总览Buffer、FlatMap、GroupBy、GroupBy、Map、Scan、Window…具体使用介绍Buffer可以简单的理解为缓存,它可以批量或者按周期...转载 2018-07-24 06:35:14 · 117 阅读 · 0 评论 -
RxJava进阶一(创建类操作符)
前面已经对RxJava原理进行介绍,相信大家对于RXJava已经有了初步的认识,但是在具体使用方面还有些懵懂,从这篇开始详细介绍下RxJava的具体使用,首先介绍下RXJava的创建操作符~操作符总览create、just、from、defer、range、interval、timer、empty、never 、error、repeat、delay…具体使用介绍createc...转载 2018-07-24 06:35:08 · 146 阅读 · 0 评论 -
RxJava 基础
RxJava 是什么?一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库~Rx Java 有什么优势?逻辑简洁 异步RxJava 能做什么?EventBus事件中心 与Retrofit结合进行网络处理 RxBinding ….初始RxJava我们先来看一下这坨代码: new Thread() { @Overrid...转载 2018-07-24 06:34:51 · 142 阅读 · 0 评论 -
RxJava 详解
RxJava 到底是什么一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。API 介绍和原理简析1. 概念:扩展的观察者模式RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。 Observable 和 Observ...转载 2018-04-03 08:38:12 · 255 阅读 · 0 评论 -
Rx介绍
ReactiveX的历史ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持.NET、JavaScript和C++,Rx近几年越来越流行了,现在已经支持几乎全部的流行编程语言了,...翻译 2018-03-30 08:11:29 · 2569 阅读 · 0 评论 -
带你一步一步揭开Rxjava2.0的神秘面纱(3)
前言上一节讲解了线程调度, 并且举了两个实际中的例子, 其中有一个登录的例子, 不知大家有没有想过这么一个问题, 如果是一个新用户, 必须先注册, 等注册成功之后再自动登录该怎么做呢.很明显, 这是一个嵌套的网络请求, 首先需要去请求注册, 待注册成功回调了再去请求登录的接口.我们当然可以想当然的写成这样: private void login() { ap...转载 2018-05-03 09:30:04 · 137 阅读 · 0 评论 -
带你一步一步揭开Rxjava2.0的神秘面纱(2)
前言上一节教程讲解了最基本的RxJava2的使用, 在本节中, 我们将学习RxJava强大的线程控制.正题还是以之前的例子, 两根水管:RxJava正常情况下, 上游和下游是工作在同一个线程中的, 也就是说上游在哪个线程发事件, 下游就在哪个线程接收事件.怎么去理解呢, 以Android为例, 一个Activity的所有动作默认都是在主线程中运行的, 比如我们在onCr...转载 2018-05-03 09:29:18 · 245 阅读 · 0 评论 -
带你一步一步揭开Rxjava2.0的神秘面纱(1)
Android中使用RxJava2, 先添加Gradle配置: compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'正题在开始学习之前,先来介绍点原理性的东西。网上也有很多介绍RxJava原理的文章,通常这些文章都从观察者模式开始,先讲观察...转载 2018-05-03 09:28:00 · 157 阅读 · 0 评论 -
Rxjava2入门教程二:Observable与Observer响应式编程在Rxjava2中的典型实现
如需下载源码,请访问https://github.com/fengchuanfang/Rxjava2Tutorial在RxJava中,函数响应式编程具体表现为一个观察者(Observer)订阅一个可观察对象(Observable),通过创建可观察对象发射数据流,经过一系列操作符(Operators)加工处理和线程调度器(Scheduler)在不同线程间的转发,最后由观察者接受并做出响应的...转载 2019-03-03 17:49:31 · 241 阅读 · 0 评论 -
Rxjava2入门教程三:Operators操作符
Operators操作符操作符(Operators):其实质是函数式编程中的高阶函数,是对响应式编程的各个过程拆分封装后的产物。以便于我们操作数据流。按照其作用具体可分为以下几类:创建:创建一个可观察对象Observable并发射数据过滤:从Observable发射的数据中取出特定的值变换:对Observable发射的数据执行变换操作组合:组合多个Observable,例如:{1,2...转载 2019-03-03 17:50:28 · 220 阅读 · 0 评论