android轮询

article/2025/10/14 8:43:43

目录

轮询实现方案:

Timer

Handler

RxJava

1.Interval

2.repeatWhen


轮询实现方案:

方案一:  Timer + Thread

实现思路:使用timer定时执行TimerTask

缺点:如果有异步任务,下次任务开始执行时需要判断上次任务是否完成,从而导致任务间隔时间不可控。

方案二:  HandlerThread

实现思路:在HandleMessage方法中执行任务,任务结束后向MessageQueue中添加延时消息

优点:如果有异步任务,只需在异步任务执行完毕后再向MessageQueue中添加延时消息,任务间隔时间可控

方案三: RxJava

实现思路: interval or repeatWhen

优点:优雅,逻辑清晰,和retrofit结合

Timer

static class CommitTimer extends TimerTask {@Overridepublic void run() {commitLock.lock();try {doSome(0);//网络请求} catch (Exception ex) {ex.printStackTrace();} finally {commitLock.unlock();}}
}
Timer timer = new Timer();
timer.schedule(new CommitTimer(), 10 * 1000, 5*60* 1000);//Teask,延时时间,轮询间隔

 Handler

HandlerThread handlerThread = new HandlerThread("BackgroundService");handlerThread.start();handler = new Handler(handlerThread.getLooper()){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);//模拟耗时任务try {doSome(0);} catch (InterruptedException e) {e.printStackTrace();}//向MessageQueue中添加延时消息,5s后重复执行以上任务handler.sendEmptyMessageDelayed(MSG_GET_COMPARE_RESULT,5000);}};return new GetCompareResultBinder();

RxJava

1.Interval

 mSubscrib = Observable.interval(0, POLINNG_INTERVAL_TIME, TimeUnit.SECONDS).flatMap(i -> doSome(0))//映射为网络请求,达到轮询的目的.subscribe(this::showSome);//根据返回结果终止轮询
private void showSome(Data data) {if (data.idRight()) {mSubscrib.dispose();}}

Android RxJava应用:网络请求轮询(无条件) - 简书

轮询间隔时间固定,灵活性不高

2.repeatWhen

mSubscrib = doSome(0).repeatWhen(objectObservable -> {Log.d(TAG, "repeatWhen");return objectObservable.zipWith(Observable.range(1, 5), (o, integer) -> integer).flatMap((Function<Integer, ObservableSource<?>>) integer ->Observable.timer((long) POLINNG_INTERVAL_TIME * integer,TimeUnit.SECONDS));}).takeUntil(result -> {//takeUntil 根据返回结果结束轮询,//不能用repeatWhen里返回error来结束轮询,//因为这样会导致最后一次返回的数据不会被执行,直接跳转到系统的error逻辑Log.d(TAG, "taleUntil");return result.isRight();}).subscribe(this::showSome);

Android RxJava应用:网络请求轮询(有条件) - 简书

可以灵活调整轮询时间 

补充:


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

相关文章

nginx轮询

创建容器1&#xff1a; docker create -it --name zyr1 centos:7 /bin/bash docker start zyr1 进入容器&#xff1a; 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模型的应用层协议&#xff0c;这种c-s的模式虽然大多数情况都能满足需求&#xff0c;但是某些场景也需要服务端能够将一些信息实时的推送到客户端&#xff0c;即实现服务器向客户端推消息的功能。 比如&#xff1a; 配置管理…

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

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

linux cgroup 死循环,Linux CGroup 基础

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

linux cgroup 原理,Cgroup框架的实现

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

CGroup的原理和使用

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

Linux cgroup介绍

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

漫谈cgroup

什么是cgroup cgroup 是linux内核的一个功能&#xff0c;用来限制、控制与分离一个进程组的资源&#xff08;如CPU、内存、磁盘I/O等&#xff09;。它是由 Google 的两位工程师进行开发的&#xff0c;自 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、仅用率控制&#xff08;权重&#xff09;2、周期限制方法一&#xff1a;在命令行里直接设置方法二&#xff1a;创建容器后&#xff0c;关闭容器在文件里直接修改方法三&#xff1a;进入容器查看 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下控制一个&#xff08;或一组&#xff09;进程的资源限制机制&#xff0c;全称是control groups&#xff0c;可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制&#xff0c;比如8核的机器上…

LINUX CGROUP总结

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

cgroup 简介

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

cgroup基础介绍

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

深入浅出cgroup

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

Cgroup概述

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

Cgroup是什么(相关概念、功能、作用、特点、怎么用)

文章目录 Cgroup 什么是CgroupCgroup的相关概念相互关系Cgroup的功能Cgroup的作用Cgroup的层级图及特点Cgroup怎么用 什么是Cgroup cgroups&#xff0c;其名称源自控制组群&#xff08;control groups&#xff09;的简写&#xff0c;是Linux内核的一个功能&#xff0c;用来限…