Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解基础数据源具有新值时可观察到的RxJava

理解基础数据源具有新值时可观察到的RxJava
EN

Stack Overflow用户
提问于 2021-01-08 22:35:58
回答 1查看 146关注 0票数 0

我正在尝试实验RxJava可观测和观察者代码。我的目标是检查底层源接收新数据值时是如何工作的。我的代码是:

代码语言:javascript
运行
AI代码解释
复制
List<Integer> numbers = new ArrayList<>();
Runnable r = new Runnable() {
            @Override
            public void run() {
                int i = 100;
                while(i < 110) {
                    numbers.add(i);
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    i++;
                }
            }
        };
        numbers.add(0);
        numbers.add(1);
        numbers.add(2);
        Observable.fromIterable(numbers)
                .observeOn(Schedulers.io())
                .subscribe(i -> System.out.println("Received "+i+ " on "+ Thread.currentThread().getName()),
                        e -> e.printStackTrace());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread t = new Thread(r);
        t.start();

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

所以我有一个号码列表。然后,我有一个runnable,它在这个列表中添加了新的数字,在添加之间有一个时间间隔。我还没开始织线呢。我将0,1,2添加到列表中,然后用它创建一个可观察的,从池中调度线程上的观察者,最后订阅可观察到的线程。当订阅发生时,可观察的发出值0,1,2和观察者被调用(执行传递给订阅的lambda)。然后在主线程上引入1秒的延迟,然后使用前面创建的runnable生成一个新线程,并添加最后一个延迟,这样应用程序就不会立即退出。

我期望的是,当新的数字被添加到列表中时,必须调用观察者,从而打印消息。但这是不可能的。在我的理解上,我肯定弄错了。我是否也需要将可观察性放在调度程序上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-09 04:20:55

Observable.fromIterable()方法是每次构建订阅时可观察到的值的“一次”加载。在构建订阅之后发生的事情不再有影响了。当您使用带有subscribe(onNext, onError, onComplete)参数的onComplete方法时,您将看到订阅已经完全消耗,三个初始值已经打印出来。

您可以使用Subject (类似于PublishSubject),其中使用onNext()方法添加“新值”,而之前构建的订阅仍然处于活动状态(尚未完成)。这样,您就可以先构建订阅,然后继续为主题中的新值调用onNext(),直到完成并调用onCompleted()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65640038

复制
相关文章
零基础理解RxJava和响应式编程
RxJava发展到现在已经在2016年推出了第二代。可能你听说过很多人讲起RxJava,但是很少在实际项目开发中用到它。 原因很简单,RxJava虽然很好用,但是它有一定的学习成本。很多人只是知道这么个东西,但是没有真正的去学习和推动RxJava。毕竟会觉得即使没有RxJava也一样能写好代码。 其实它的学习成本和带来的收益对比的话,是非常值得花点时间去学的。当你切换到Rx编程思维之后,会发现很多以前难以处理的问题在响应式编程下都变得易如反掌。 而很多公司没有推进RxJava的原因,主要在于船大难掉头。笔者见过一个上亿日活的项目,至今还在用ant构建。可想而知还有许多新技术受限于项目的历史原因没法应用。 另一个推动RxJava困难的原因在于开发团队水平层次不齐。如果你的团队里有成员连并发和线程都搞不清楚的话,RxJava可能只能带来负面效果。
PhoenixZheng
2018/09/29
7940
零基础理解RxJava和响应式编程
Android RxJava应用:合并数据源
Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。
Carson.Ho
2022/03/25
8030
Android RxJava应用:合并数据源
关于RxJava的基础心法解析
2016年学习过一阵子RxJava的操作符也做过一些笔记,我们项目的网络请求框架也替换成了Okhttp+Retrofit,所以使用RxJava做线程间切换就非常好用。
静默加载
2020/05/29
4570
新的数据源命令 WikipediaData
相信各位使用过 WolframAlpha 的朋友, 会发现不少查询结果源来自于维基百科. 那现在 Wolfram Research 公司在 10.1 版本中更直接为我们提供了一个检索 Wiki 的命令
WolframChina
2018/05/31
7503
Android RxJava 实战讲解:合并数据源 & 同时展示数据
前言 Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的R
Carson.Ho
2019/02/22
3.6K2
【译】使用RxJava从多个数据源获取数据
试想,需要一些动态数据的时候,只要每次都请求网络就可以了。但是,更有效率的做法是,把联网得到的数据,缓存到磁盘或内存。
小鄧子
2018/08/20
2.2K0
【译】使用RxJava从多个数据源获取数据
左值和右值的理解[通俗易懂]
eg:a = b;a在左边,a为左值,那在右边的b就是右值(前提是语句合法,比如说a+25 = b;则不合法)
全栈程序员站长
2022/07/22
1.3K0
jQuery 隐藏具有指定class属性值的元素
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>前端</title> <style> .antzone{ width:200px; height:100px; background:#ccc; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script> $(document).ready(func
IT工作者
2022/02/17
5.4K0
【译】使用RxJava从多个数据源获取数据
试想,需要一些动态数据的时候,只要每次都请求网络就可以了。但是,更有效率的做法是,把联网得到的数据,缓存到磁盘或内存。
用户1740424
2018/07/23
2.7K0
【译】使用RxJava从多个数据源获取数据
[深入解析C#] 可空值类型
Tony Hoare于1965年在Algol语言中首次引入了null引用的概念,后来他把这项举措称为“十亿美金的过失”。无数开发人员饱受NullReferenceException(.NET)、NullPointerException(Java)等的折磨。由于此类问题的普遍性,Stack Overflow上有大量与之相关的典型问题。既然可空特性如此声名狼藉,为何C# 2以及.NET 2.0要引入可空值类型呢?
科控物联
2022/03/29
2.5K0
Android 应用架构演变
代码被划分为两层结构:Data Layer(数据层)负责从数据源获取和存储数据;View Layer(视图层)负责处理并将数据展示在UI上
用户3004328
2018/09/06
1.4K0
Android 应用架构演变
DeepMind新突破,AI可提前48小时预测急性肾损伤
DeepMind最近公布了一项在AI医疗上的研究新成果,它们和美国退伍军人事务部(VA)合作开发了一种急性肾损伤(AKI)预测算法,可以提前两天预测急性肾损伤疾病的发生。
镁客网
2019/08/05
3960
DeepMind新突破,AI可提前48小时预测急性肾损伤
CA1008:枚举应具有零值
非中断 - 如果系统提示你向无标志枚举添加 None 值。 中断 - 如果系统提示你重命名或删除任何枚举值。
用户4268038
2022/01/10
5500
专属| 具有僵尸网络功能的新蠕虫现身
日前,研究团队发现了一种新的恶意软件,能够针对Linux和Windows服务器,将加密货币挖掘,僵尸网络和勒索软件功能结合在一个自我扩展的蠕虫软件包中。Xbash使用可利用的漏洞和弱密码强制组合在服务器之间传播,此外,Xbash的僵尸网络和勒索软件组件通过利用未受保护和易受攻击但未修补的服务来定位Linux服务器。Xbash还具有由代码编译,代码压缩和转换以及代码加密提供支持的反检测功能。
漏斗社区
2018/10/23
7860
专属| 具有僵尸网络功能的新蠕虫现身
RxJava 2.0还没熟悉,RxJava 3.0说来就来了!(基础篇)
每个Android开发者,都是爱RxJava的,简洁线程切换和多网络请求合并,再配合Retrofit,简直是APP开发的福音。不知不觉,RxJava一路走来,已经更新到第三大版本了。不像RxJava 2对RxJava 1那么残忍,RxJava 3对RxJava 2的兼容性还是挺好的,目前并没有做出很大的更改。RxJava2到2020年12月31号不再提供支持,错误的会同时在2.x和3.x修复,但新功能只会在3.x上添加。
Android技术干货分享
2019/07/18
6.2K0
RxJava源码浅析(一): 基础流程
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences 翻译下来就是 “是一个使用可观测序列来组建异步、基于事件的程序的库”。说人话,看了这句话,初学者一脸懵逼。
笔头
2022/03/03
5200
CA1069:枚举不得具有重复值
每个枚举成员都应具有唯一的常数值,或者为其显式分配枚举中的前一个成员以指示共享值的明确意图。 例如:
用户4268038
2022/01/11
6690
响应式编程|Kotlin与LiveData扩展函数实践技巧
前半部分介绍响应式编程的一些思想,后半部分介绍我们如何基于LiveData实现数据流设计的落地实践。 "一切都是对象 ( Everything is an Object! )" 当使用面向对象(Object-Oriented)的思维去开发时,我们被教导:“一切都是对象 ( Everything is an Object! )”。 我们自顶向下地分解问题,将模块封装为交互(method) 和状态(property)的集合,通过不断将模块拆分成更细的维度,最后形成一个个具有明确定义的内聚性的类(Class) 
QQ音乐技术团队
2021/03/30
1.8K0
点击加载更多

相似问题

理解RxJava基础

12

RxJava可观察到可完成,如何避免toBlocking()

28

取消订阅不会级联回RxJava中可观察到的基础

14

取消订阅时可观察到rxJava停止

12

当可观察到的映射为可完成时,不调用RxJava2订阅

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档