java 轮询请求_使用RxJava来实现网络请求轮询功能

article/2025/10/14 8:33:07

原标题:使用RxJava来实现网络请求轮询功能

近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成。受此刺激,永辉超市股价迅速涨停,午后临时停牌。若此举成行,超级物种将更有底气对垒阿里巴巴的盒马鲜生,生鲜商超的新零售市场将展开激烈争战。

作者简介

各位小伙伴们大家早上好,新的一周又开始了,希望大家都能有个好心情迎接新的一周。

本篇来自juexingzhe的投稿,分享了一种通过RxJava来轮询的实现方式,希望大家喜欢!

juexingzhe的博客地址:

http://www.jianshu.com/u/ea71bb3770b4

前言

轮询的功能很常见了,之前 Android 中比较常用的方式就是通过 Handler 来实现,发送一个 Deley 消息,在 handlerMessage 再根据条件发送消息,这种方式需要小心内存泄漏,需要自己处理这个问题。这个不是我们今天的重点,今天来看下另外一种轮询的实现方式,通过 RxJava 来实现。

开始

通过 RxJava 来实现的方式有下面两个特点:

自动解除轮询和订阅关系,没有内存泄漏的风险;

可以跟 Activity 或者 Fragment 生命周期绑定,自动停止轮询

涉及到的RxJava知识点:

Subject

TakeUntil

Filter

Compose

因为后面很多逻辑用到上面的操作符,所以先简单看下这几个操作符,热热身。

Subject

从代码可以看出来 Subject 既可以当观察者也可以当被观察者。

publicabstractclassSubject extendsObservable implementsObserver

所以可以在生命周期中通过 Subject 发送事件然后又自己接收,从而根据事件类型做相应的操作。

Subject 总共有四种类型

AsyncSubject

BehaviorSubject

PublishSubject

ReplaySubject

今天我们就说下第二种类型 BehaviorSubject,它可以给订阅者发送订阅前最近的事件和订阅后发送的事件:

10ff33b32074a4a2e65e46b95e5b6f63.png

图中橙色的就是订阅前最近发送的事件,在订阅后也可以收到。文字解释始终太苍白,我们来看下代码:

BehaviorSubject behaviorSubject = BehaviorSubject.create(); behaviorSubject.onNext( 1); behaviorSubject.onNext( 2); behaviorSubject.subscribe( newConsumer() { @Overridepublicvoidaccept(Integer integer)throwsException{ Timber.tag(TAG).d( "running num : "+ integer); } });

behaviorSubject.onNext( 3); behaviorSubject.onNext( 4);

上面代码运行结果就是收到2, 3,4

c3ad162529aa4316dd66b36cb9d54e61.png

TakeUntil

这是一个操作符,可以这样用

AObservable.takeUntil(BObservable)

可以 AObservable 监听另外一个 BObservable,如果 BObservable 开始发送数据,AObservable 就不再发送数据。

看一下官方的图片解释,B 发送 0 数据后,A 就停止发送数据了。

6e84aa443ae3de1addc6392bb34aef73.png

talk is cheap, show me the code:

Observable.interval( 1, TimeUnit.SECONDS). subscribeOn(Schedulers.io()). takeUntil(Observable.timer( 5, TimeUnit.SECO


http://chatgpt.dhexx.cn/article/G4iuuieF.shtml

相关文章

android轮询

目录 轮询实现方案: Timer Handler RxJava 1.Interval 2.repeatWhen 轮询实现方案: 方案一: Timer Thread 实现思路:使用timer定时执行TimerTask 缺点:如果有异步任务,下次任务开始执行时需要判断…

nginx轮询

创建容器1: docker create -it --name zyr1 centos:7 /bin/bash docker start zyr1 进入容器: docker exec -it zyr1 /bin/bash 安装ipconfig命令 yum provides ifconfig 安装nginx依赖 yum -y install openssl openssl-devel prce-devel zlib z…

python 轮询mysql_python 轮询

1. 轮询 三天之后,小钱才拿到这个快递 总结 快递不能及时的传达 小钱儿 - 卒 客户端浪费极大资源 老程头儿 -痴呆 资源浪费也很严重 HTTP无法跟踪定义客户端 无状态 2. 长轮询 缺陷: 消息实时性不高 传达室茶室的资源有限 占用资源 客户端线程资源占用 3. 长连接 总结 占用的空…

java 轮询http_HTTP轮询模型

HTTP轮询模型 长短轮询 http协议是一种client-server模型的应用层协议,这种c-s的模式虽然大多数情况都能满足需求,但是某些场景也需要服务端能够将一些信息实时的推送到客户端,即实现服务器向客户端推消息的功能。 比如: 配置管理…

七种轮询介绍(后附实践链接)

我有一个朋友~ 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。 不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现…

linux cgroup 死循环,Linux CGroup 基础

CGroup V1 1. CGroup 概念Task: 任务,也就是进程,但这里的进程和我们通常意义上的 OS 进程有些区别,在后面会提到。 CGroup: 控制组,一个 CGroup 就是一组按照某种标准划分的Tasks。这里的标准就是 Subsystem 配置。换句话说&…

linux cgroup 原理,Cgroup框架的实现

CGoup核心主要创建一系列sysfs文件,用户空间可以通过这些节点控制CGroup各子系统行为,以及各子系统模块根据参数。在执行过程中或调度进程到不同CPU上,或控制CPU占用时间,或控制IO带宽等等。另外,在每个系统的proc文件…

CGroup的原理和使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、主要功能二、基本概念三、cgroups子系统介绍四、cgroups 层级结构五、数据结构 前言 Linux CGroup全称Linux Control Group, 是Linux内核的一个…

Linux cgroup介绍

本文参考网上一些资料,结合实际应用,简要介绍一下cgroup。 为什么要有cgroup Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间&#…

漫谈cgroup

什么是cgroup cgroup 是linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘I/O等)。它是由 Google 的两位工程师进行开发的,自 2008 年 1 月正式发布的 Linux 内核 v2.6.24 开始提供此能力。 cgroup …

容器中的Cgroup

文章目录 容器中的CgroupCgroup概念容器化两个关键核心现代容器化带来的优势什么是Cgroup Cgroup的一些测试测试CPU和内存使用情况CPU 周期限制 CPU Core 控制CPU 配额控制参数的混合使用内存限额Block IO 的限制bps 和 iops的限制 容器中的Cgroup Cgroup概念 容器化两个关键…

Cgroup 资源配置

目录 一、Cgroup定义 二、使用stress压力测试工具测试cpu和内存状态 1、创建一个dockerfile文件 2、创建镜像 3、创建容器 ①创建容器 ②、创建容器并产生10个子函数进程 三、CPU 周期 1、实现方案 2、实验 四、CPU Core控制 五、docker build 一、Cgroup定义 cg…

cgroup资源配置

一、cgroup介绍二、利用stress 压力测试工具来测试三、CPU控制1、仅用率控制(权重)2、周期限制方法一:在命令行里直接设置方法二:创建容器后,关闭容器在文件里直接修改方法三:进入容器查看 3、cpu核心数4、…

【CGroup原理篇】3. CGroup使用指南

写在前面 这里先从整体上概述cgroup的创建,挂载,参数配置和卸载,后面的章节中会一一介绍每个子系统的详细使用方法和使用案例。 一、使用Linux命令管理CGroup 1.1挂载cgroup临时文件系统 mount -t tmpfs cgroup_root /sys/fs/cgroup 1.2 创建挂载层级需要的目录 mkdir /sy…

Linux CGroup 原理

Linux CGroup 原理 1、CGroup简介 cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制,比如8核的机器上…

LINUX CGROUP总结

简介: Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是Paul Men…

cgroup 简介

cgroup 的功能在于将一台计算机上的资源(CPU,memory,network)进行分片,来防止进程间不利的资源抢占。 术语 cgroup:关联一组 task 和一组 subsystem 的配置参数。 一个 task 对应一个进程,cg…

cgroup基础介绍

一项新概念的产生,必然有其原因,cgroup也不例外,最初由谷歌工程师Paul Menage和Rohit Seth提出【1】:因为计算机硬件能力越来越强大,为了提高机器的使用效率,可以在同一台机器上运行不同运算模型的工作。开…

深入浅出cgroup

一、什么是cgroup Cgroup是linux内核用来控制系统资源的机制,它将操作系统中的所有进程以组为单位划分,给这一组进程定义对某一类资源特定的访问权限。Cgroup用子系统(subsystem)来描述所能控制的系统资源,子系统具有多…

Cgroup概述

一、Cgroup的目的 Cgroup和namespa类似,也是将进程进程分组,但是目的与namespace不一样,namespace是为了隔离进程组之前的资源,而Cgroup是为了对一组进程进行统一的资源监控和限制。 二、为什么需要Cgroup 在Linux里&#xf…