当前标签 / RxJava / 总共6篇

图解 RxJava2-【3】observeOn

上篇文章分析了 RxJava 中 subscribeOn 方法的实现原理,然而只使用 subscribeOn 发现上下游都是执行在子线程中。在日常开发中往往是将上游耗时任务通过 subscribeOn 指定在子线程中,下游通常是更新 UI 等需要在主线程中进行,使用 observeOn(AndroidSchedulers.mainThread()) 就能实现,那么它是怎么做到的呢?

例子

基于上篇文章的代码,修改上下游联系,添加 observeOn(AndroidSchedulers.mainThread())

source.subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(observer);
Log.e(TAG, "其他任务执行");

打印如下:

此时主线程中的「其他任务」没有被阻塞,上游的耗时任务在子线程 RxNewThreadScheduler-1 中执行,而下游接收任务在主线程中进行,并且事件传递不保证顺序(多次执行输出可能都不同),这也是多线程执行顺序的不确定性特点,上篇已介绍过。

阅读更多

图解 RxJava2-【2】subscribeOn

在 RxJava 中可以通过 subscribeOn/observeOn 很方便地完成上下游指定线程的切换,日常开发除了一些常用的 Rx 操作符外,这两个方法也是打交道最多的。本篇先分析 subscribeOn 方法。

例子

先回顾上篇文章的流程,饭店(Observable)开张前提要有厨师(ObservableOnSubscribe),接着改名叫沙县小吃(ObservableCreate),饭店接客(Observable.subscribe(observer)),创建服务员(CreateEmitter)把顾客和厨师关联起来,之后厨师每做一道菜都通过服务员端给顾客,整个流程如下:

我们都知道 Andriod 有主线程,在未指定线程切换操作的情况下,上图的流程是跑在主线程中,另外主线程中往往还存在其他任务需要执行,所以结合线程来看应该是这样的。

阅读更多

Rxjava2使用总结

前言

Rxjava2 是 函数式编程响应式编程 两种牛逼的思想结合的产物,也是在 Java 中这两种思想的一种实现。

函数响应式编程 (Functional Reactive Programming:FRP):是一种通过一系列函数的组合调用来发射,转变,监听,响应数据流的编程范式。

在 Rxjava2 中提供了 5种 观察者模式来实现这种函数响应式编程思想。

ObservableSource/Observer

可通过 onNext 方法发送单条数据或者数据序列,通过 onComplete 发送完成通知或通过 onError 发送异常通知,不支持 背压策略

抽象类 Observable 是接口 ObservableSource 下的一个抽象实现,我们可以通过 Observable 创建一个可观察对象发射数据流。

Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("Hello World");
        emitter.onComplete();
    }
});

调用 Observable.create 方法,创建一个可观察对象,并通过 onNext 发送一条数据 “Hello World”,然后通过 onComplete 发送完成通知。

阅读更多

MVP架构的Android基础框架

说明

这是我开源的一个基于MVP架构的Android开发基础框架,源码开放在gitlab上。

仓库地址:https://gitlab.com/lxqxsyu/TestKotlin

框架介绍

MVP架构,Retrofit+Rxjava+Okhttp网络请求,可切换Glide和Fresco图片框架,封装基础刷新分页加载,部分功能后期会有所改进。

框架整体结构

框架整体结构

阅读更多

从响应式编程谈RxJava

参考链接:

响应式编程

响应式编程是一种基于异步数据流概念的编程模式

响应式编程关键性概念就是事件,在某种程度上,这并不是什么新东西。事件总线(Event buses)或咱们常见的单击事件就是一个异步事件流,你可以观察这个流,也可以基于这个流做一些自定义操作(原文:side effects,副作用,本文皆翻译为自定义操作)。响应式就是基于这种想法。你能够创建所有事物的数据流,而不仅仅只是单击和悬停事件数据流。 流廉价且无处不在,任何事物都可以当作一个流:变量、用户输入、属性、缓存、数据结构等等。比如,假设你的微博评论就是一个跟单击事件一样的数据流,你能够监听这个流,并做出响应。

最重要的是,有一堆的函数能够 创建(create)任何流,也能将任何流进行 组合(combine)和 过滤(filter)。 这正是 函数式 的魔力所在。一个流能作为另一个流的 输入(input),甚至多个流也可以作为其它流的输入。你能 合并(merge)两个流。你还能通过 过滤(filter)一个流得到那些你感兴趣的事件。你能将一个流中的数据 映射(map)到一个新的流中。

响应式编程流模型

阅读更多