当前位置: 首页 > news >正文

android 使用协程CoroutineScope 实现定时器

满足延迟执行、立即执行,每次任务间隔时长,总时长的任务

使用1

class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务,然后每隔1秒执行1次,总执行时间60秒fun testTime(){var startTime = System.currentTimeMillis()log("执行 开始 startTime:${startTime}")val job =  viewModelScope.startTime(interval = 5000,duration = 1000,totalTime = 60*1000,onNext = {count->log("执行次数:${count}")},onFinish = {log("执行结束")log("执行 结束 总耗时:${System.currentTimeMillis() - startTime}")})viewModelScope.launch {delay(20000)log("模拟执行手动结束")job.cancel()}}}

使用2

 //立即执行任务,然后每隔1秒执行1次,总执行时间60秒
val job =  viewModelScope.startTime(duration = 1000,totalTime = 60*1000,onNext = {count->log("执行次数:${count}")},onFinish = {log("执行结束")log("执行 结束 总耗时:${System.currentTimeMillis() - startTime}")})

 使用3

 /*立即执行任务,然后每间隔1秒执行1次,要么手动调用 job.cancel(),要么等所在协程生命周期结束,才会结束,但不会回调 onFinish 
*/val job =  viewModelScope.startTime(duration = 1000,onNext = {count->log("执行次数:${count}")},onFinish = {log("执行结束")log("执行 结束 总耗时:${System.currentTimeMillis() - startTime}")})

使用4

  /*延迟5秒再执行任务,然后每间隔1秒执行1次,要么手动调用 job.cancel(),要么等所在协程生命周期结束,才会结束,但不会回调 onFinish 
*/ val job =  viewModelScope.startTime(interval = 5000,duration = 1000,onNext = {count->log("执行次数:${count}")},onFinish = {log("执行结束")log("执行 结束 总耗时:${System.currentTimeMillis() - startTime}")})

 //代码封装 

/*** @param interval 单位毫秒,用于定时器延迟时间开启,例如:interval = 5000,则是5秒后才会开始倒计时* @param duration 单位毫秒,用户每次定时任务间隔时长执行1次,例如 duration = 1000,则每间隔1秒执行1次* @param totalTime 单位毫秒,用于定时器执行的总时长,*        如果为空的话,会一直在运行,直到手动调用cancel 方法,或者所在协程声明周期结束 而结束* @onNext(count) ,返回每次执行的次数* @onFinish() 任务正常执行完成*/fun CoroutineScope.startTime(interval:Long? = 0,duration:Long,totalTime:Long? = null,onNext:(Int)->Unit,onFinish:(()->Unit)? = null):Job{if (duration<=0){throw IllegalArgumentException("间隔时间必须大于0")}return this.launch {interval?.let { _interval->if (_interval>0){delay(_interval)}}var isStart = truevar runAllTotalTime:Long = 0var count = 0while (isStart){if (totalTime!= null && totalTime>0 && runAllTotalTime>= totalTime){isStart = falseonFinish?.invoke()}else{delay(duration)runAllTotalTime+=durationcount+=1onNext.invoke(count)}}}}

相关文章:

android 使用协程CoroutineScope 实现定时器

满足延迟执行、立即执行&#xff0c;每次任务间隔时长&#xff0c;总时长的任务 使用1 class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务&#xff0c;然后每隔1秒执行1次&#xff0c;总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(…...

【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;AcWing算法学习笔记 &#x1f4ac;总结&#xff1a;希望你看完…...

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…...

langchain学习笔记(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;️&#x1f517; Langchain 基于输入的动态路由逻辑&#xff0c;通过上一步的输出选择下一步操作&#xff0c;允许创建非确定性链。路由保证路由间的结构和连贯。 有以下两种方法执行路由 1、通过Ru…...

周处除三害在线资源最新电影1080p高清

打开下面这个链接就可以看到 周处除三害在线资源最新电影1080p高清 如果链接打不开&#xff0c;就复制下面的网址到浏览器打开 https://www.zhufaka.cn/liebiao/A09504AE3BF8BD06 用阿里云盘下载&#xff0c;下载完成之后&#xff0c;用迅雷播放 周处除三害在线资源最新电…...

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚&#xff0c;后面开发是不需要再新建工程的&#xff0c;一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行&#xff0c;只要前…...

R语言简介|你对R语言了解多少?

R语言是一种专门用于统计计算和图形展示的开源编程语言&#xff0c;它在数据科学领域有着广泛的应用。下面对R语言的环境、基础语法及注释进行解释&#xff1a; R语言环境 安装与配置 安装R语言通常可以从官方站点下载对应操作系统的安装包&#xff0c;如Windows、Linux、ma…...

Android的硬件接口HAL

我一直觉得&#xff0c;现代计算机不是一门科学&#xff0c;起码快算不上一门理科科学。上上下下全是人造&#xff0c;左左右右全是生意&#xff0c;用管理学&#xff0c;经济学去学计算机&#xff0c;也许更看得懂很多问题。HAL就是一个典型例子。 传统Linux绕开了微软的霸权…...

【js】数组的常用方法

增加 push,unshift,splice,concat 前面三种修改原数组,concat不会修改原数组push 从后面添加数据,并返回新数组的长度unshift 从前面添加数据,并返回新数组的长度splice 可以接受三个参数,第一个参数开始位置,第二个参数是删除元素的数量,第三个参数是插入的数据concat 合并数…...

08. Nginx进阶-Nginx动静分离

简介 什么是动静分离&#xff1f; 通过中间件将动态请求和静态请求进行分离。分离资源&#xff0c;减少不必要的请求消耗&#xff0c;减少请求延时。 动静分离的好处 动静分离以后&#xff0c;即使动态服务不可用&#xff0c;静态资源仍不受影响。 动静分离示意图 动静分离…...

RPC--一起学习吧之架构

RPC&#xff08;远程过程调用&#xff09;是一种网络通信协议&#xff0c;它允许一台计算机&#xff08;客户端&#xff09;上的程序调用另一台计算机&#xff08;服务器&#xff09;上的程序&#xff0c;就像调用本地程序一样。RPC 可以使得网络中的不同进程能够相互调用&…...

服务器后端是学习java还是php

没有绝对的"最好"语言&#xff0c;每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言&#xff1a; 1. Java&#xff1a;Java是一种通用且强大的语言&#xff0c;广泛用于企业级应用和大型系统。它有很好的性能和可靠性&#xff0c;并且具有优秀的生态系…...

DCFL: for Oriented Tiny Object Detection

文章目录 AbstractIntroductionContributionRelated Work定向目标检测微小目标检测多尺度学习标签分配上下文信息特征增强MethodOverview动态先验Coarse Prior MatchingFiner Dynamic Posterior MatchingAblation StudyAnalysis不平衡问题的调解可视化速度Conclusionhh 源代码 …...

代码学习记录11

随想录日记part11 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.04 主要内容&#xff1a;今天的主要内容是深入了解栈和队列中比较难的题录类型&#xff1a;滑动窗口最大值与前 K K K 个高频元素&#xff0c;最后对于这三天学习的队列和栈的知识进行总结。…...

【LeetCode】第 387 场周赛

3069. 将元素分配到两个数组中 I 给你一个下标从 1 开始、包含 不同 整数的数组 nums &#xff0c;数组长度为 n 。 你需要通过 n 次操作&#xff0c;将 nums 中的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中&#xff0c;将 nums[1] 追加到 arr1 。在第二次操作…...

基于 Vue3打造前台+中台通用提效解决方案(下)

47、通用组件 - 倒计时组件 特惠部分存在一个倒计时的功能,所以我们需要先处理对应的倒计时模块,并把它处理成一个通用组件。 那么对于倒计时模块我们又应该如何进行处理呢? 所谓倒计时,其实更多的是一个时间的处理,那么对于时间的处理,此时我们就需要使用到一个第三方…...

Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的视频智能处理软件&#xff0c;它利用先进的机器学习和人工智能技术&#xff0c;为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师&#xff0c;还是热爱视频创作的爱好者&#xff0c;Topaz Video AI都能帮助您轻松…...

高效办公软件中哪个提醒待办事项更有效

在忙碌的办公环境中&#xff0c;每个人都像是一台精密运转的机器&#xff0c;处理着各种任务和待办事项。而在这其中&#xff0c;总有一些人&#xff0c;他们仿佛拥有超能力般&#xff0c;总是能准时、高效地完成每一项工作。他们的秘密武器是什么呢&#xff1f;答案就是——高…...

牛客练习赛122

D:圆 正着求删除的最小代价不好做&#xff0c;采用逆向思维&#xff0c;求选择一些不相交的线段使得构成一个圆的代价尽量大&#xff0c;最后答案就是所有线段权值之和减去最大代价。 那么如何求这个最大代价呢&#xff1f;显然区间DP 老套路&#xff1a;破环成链&#xff0…...

软考复习调整策略和学习计划!

根据软考办发布的最新通知&#xff0c;在群里引起了热烈讨论的是2024年度计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试的安排。其中&#xff0c;信息系统项目管理师&#xff08;简称高项&#xff09;的考试次数从每年两次减少到只有5月份进行&#xff0c;而系…...

魔兽争霸3帧率优化完全指南:从技术原理到实战调优

魔兽争霸3帧率优化完全指南&#xff1a;从技术原理到实战调优 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一、性能瓶颈诊断&#xff1a;定位魔兽争…...

Fun-ASR-MLT-Nano-2512保姆级教程:从安装到Web界面快速上手

Fun-ASR-MLT-Nano-2512保姆级教程&#xff1a;从安装到Web界面快速上手 1. 项目介绍与核心功能 Fun-ASR-MLT-Nano-2512是阿里通义实验室推出的轻量级多语言语音识别模型&#xff0c;专为实际应用场景优化设计。这个800M参数的模型在保持小巧体积的同时&#xff0c;实现了专业…...

基于SiameseUniNLU的文本匹配与NLI实战:开源中文推理模型部署案例

基于SiameseUniNLU的文本匹配与NLI实战&#xff1a;开源中文推理模型部署案例 1. 项目介绍与核心价值 SiameseUniNLU是一个创新的中文自然语言理解模型&#xff0c;它采用统一的架构来处理多种NLP任务。这个模型最大的特点是用一套代码就能完成文本匹配、自然语言推理、实体识…...

GTE+SeqGPT部署教程:Windows WSL2环境下GTE+SeqGPT全链路运行指南

GTESeqGPT部署教程&#xff1a;Windows WSL2环境下GTESeqGPT全链路运行指南 想自己动手搭建一个能“理解”你问题、还能“回答”你的AI小助手吗&#xff1f;今天&#xff0c;我们就来玩点实在的——在Windows电脑上&#xff0c;通过WSL2&#xff08;Windows Subsystem for Lin…...

Fish Speech 1.5语音克隆5分钟快速部署:零基础小白也能玩转AI配音

Fish Speech 1.5语音克隆5分钟快速部署&#xff1a;零基础小白也能玩转AI配音 1. 认识Fish Speech 1.5语音克隆技术 Fish Speech 1.5是当前最易上手的开源语音克隆工具之一。想象一下&#xff0c;你只需要录制10秒钟的语音样本&#xff0c;就能让AI用你的声音朗读任何文本——…...

超越YOLO:在RGBT-Tiny上,为什么DETR和Diffusion模型对小目标检测更有效?

超越YOLO&#xff1a;DETR与Diffusion模型在小目标检测中的技术突破 深夜的海上搜救任务中&#xff0c;热成像画面里几个像素大小的落水者身影若隐若现&#xff1b;城市高空无人机巡检时&#xff0c;监控画面中88像素的违规车辆几乎与背景融为一体。这些真实场景揭示了计算机视…...

告别第三方平台!手把手教你用photo-sphere-viewer在小程序H5里嵌入VR全景图

告别第三方平台&#xff01;手把手教你用photo-sphere-viewer在小程序H5里嵌入VR全景图 在数字化营销日益重要的今天&#xff0c;VR全景展示已经成为房地产、家居、旅游等行业提升用户体验的标配功能。传统做法是依赖第三方VR云服务平台&#xff0c;但这往往意味着高昂的费用、…...

LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭

前言 二叉搜索树&#xff08;BST&#xff09;是算法刷题的高频必考知识点&#xff01;今天给大家带来两道最经典、最基础的 BST 题目&#xff0c;全程用最简单的递归实现&#xff0c;代码干净、思路直白&#xff0c;不用死记硬背&#xff0c;看完就能直接写&#xff01; 一道教…...

OpenClaw离线部署方案:Qwen3-32B镜像在无网络环境中的适配改造

OpenClaw离线部署方案&#xff1a;Qwen3-32B镜像在无网络环境中的适配改造 1. 离线部署的核心挑战与解决思路 去年在给某研究所部署内部知识管理系统时&#xff0c;我第一次遇到完全隔离的局域网环境。当时尝试用OpenClaw对接Qwen模型&#xff0c;发现官方默认安装流程完全依…...

【设计模式】探索状态模式在现代软件开发中的应

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...