探秘鸿蒙 HarmonyOS NEXT:鸿蒙定时器,简单倒计时的场景应用

在鸿蒙 ArkTS 开发中,定时器是实现动态效果和定时任务的重要工具。基于鸿蒙 API 12 及以上版本,ArkTS 提供了功能丰富的定时器 API,本文将带你全面了解定时器的使用方法。

一、定时器常用 API 介绍

ArkTS 中的定时器主要分为一次性定时器(setTimeout)和周期性定时器(setInterval),它们都位于全局命名空间中,使用非常方便。

1. setTimeout - 一次性定时器

typescript

setTimeout(handler: Function, delay: number, ...args: any[]): number
  • handler:定时器触发时执行的回调函数
  • delay:延迟时间(毫秒)
  • args:传递给回调函数的参数
  • 返回值:定时器 ID,用于取消定时器

2. setInterval - 周期性定时器

typescript

setInterval(handler: Function, delay: number, ...args: any[]): number

参数和返回值与 setTimeout 相同,区别在于 setInterval 会按指定间隔重复执行回调函数。

3. clearTimeout - 取消一次性定时器

typescript

clearTimeout(timeoutId: number): void
  • timeoutId:setTimeout 返回的定时器 ID

4. clearInterval - 取消周期性定时器

typescript

clearInterval(intervalId: number): void
  • intervalId:setInterval 返回的定时器 ID

二、定时器使用步骤

1. 创建定时器

typescript

// 创建一次性定时器,2秒后输出"Hello World"
const timeoutId = setTimeout(() => {console.log("Hello World");
}, 2000);// 创建周期性定时器,每秒输出当前时间
const intervalId = setInterval(() => {console.log(new Date().toLocaleTimeString());
}, 1000);

2. 传递参数

typescript

setTimeout((name: string, age: number) => {console.log(`My name is ${name}, I'm ${age} years old.`);
}, 1500, "Tom", 20);

3. 取消定时器

typescript

// 取消一次性定时器
clearTimeout(timeoutId);// 取消周期性定时器
clearInterval(intervalId);

三、代码实战与分析

下面通过几个实际案例来深入理解定时器的使用。

案例 1:简单倒计时功能

typescript

@Entry
@Component
struct CountdownTimer {@State count: number = 10;private timerId: number = -1;aboutToAppear() {// 启动倒计时this.timerId = setInterval(() => {if (this.count > 0) {this.count--;} else {clearInterval(this.timerId);}}, 1000);}aboutToDisappear() {// 组件销毁前取消定时器,避免内存泄漏clearInterval(this.timerId);}build() {Column() {Text(`倒计时: ${this.count}秒`).fontSize(30).fontWeight(FontWeight.Bold)}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}

代码分析

  • 使用 @State 装饰器实现数据绑定
  • 在 aboutToAppear 生命周期函数中启动定时器
  • 每秒更新一次 count 值,当 count 为 0 时取消定时器
  • 在 aboutToDisappear 生命周期函数中取消定时器,防止组件销毁后定时器仍在运行

案例 2:实现轮播图效果

typescript

@Entry
@Component
struct CarouselDemo {@State currentIndex: number = 0;private images: Array<string> = ['https://pic.photos/800/400?random=1','https://pic.photos/800/400?random=2','https://pic.photos/800/400?random=3','https://pic.photos/800/400?random=4'];private timerId: number = -1;aboutToAppear() {// 启动轮播定时器this.timerId = setInterval(() => {this.currentIndex = (this.currentIndex + 1) % this.images.length;}, 3000);}aboutToDisappear() {// 组件销毁前取消定时器clearInterval(this.timerId);}build() {Column() {// 轮播图片Image(this.images[this.currentIndex]).width('100%').height(200).objectFit(ImageFit.Cover)// 指示点Row() {ForEach(this.images, (_, index) => {Circle().width(index === this.currentIndex ? 12 : 8).height(index === this.currentIndex ? 12 : 8).fill(index === this.currentIndex ? '#FF4500' : '#CCCCCC').margin({ left: 5, right: 5 })})}.margin(10).justifyContent(FlexAlign.Center)}.width('100%').height('100%')}
}

代码分析

  • 使用数组存储轮播图片地址
  • 定时器每 3 秒更新一次 currentIndex,实现图片切换
  • 通过 ForEach 动态生成指示点,当前图片对应的指示点显示为橙色
  • 同样注意在组件销毁前取消定时器

四、注意事项

  1. 内存泄漏风险:如果组件销毁前未取消定时器,定时器会继续运行,可能导致内存泄漏。
  2. 性能考虑:过多或间隔过短的定时器会影响应用性能,特别是 setInterval,应谨慎使用。

掌握 ArkTS 中的定时器 API,能够帮助你实现各种动态交互效果,如自动刷新、动画过渡、数据轮询等功能。合理使用定时器,并注意避免常见陷阱,将使你的应用更加流畅和稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓基础(语义树)

进化1 package com.example.demotest.unread;import android.accessibilityservice.AccessibilityService; import android.content.res.Resources; import android.graphics.Rect; import android.util.DisplayMetrics; import android.util.Log; import android.view.access…

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…

AcWing--数据结构1

用数组来模拟链表。这种实现链表的方式也叫静态链表。 1.单链表 写邻接表&#xff1a;存储图和树 我们定义&#xff1a;e[N]用来表示某个点的值是多少&#xff1b;ne[N]用来表示某个点的next指针是多少 e和ne是用下标关联起来的 如&#xff1a;head->3->5->7->…

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…

多模态分类案例实现

以下是基于飞桨平台实现的多模态分类详细案例&#xff0c;结合图像和文本信息进行分类任务。案例包含数据处理、模型构建、训练和评估的完整流程&#xff0c;并提供详细注释&#xff1a; 一、多模态分类案例实现 import os import json import numpy as np from PIL import I…

Express框架:Node.js的轻量级Web应用利器

Hi,我是布兰妮甜 !在当今快速发展的Web开发领域,Node.js已成为构建高性能、可扩展网络应用的重要基石。而在这片肥沃的生态系统中,Express框架犹如一座经久不衰的灯塔,指引着无数开发者高效构建Web应用的方向。本文章在为读者提供一份全面而深入的Express框架指南。无论您…

K-Means颜色变卦和渐变色

一、理论深度提升&#xff1a;补充算法细节与数学基础 1. K-Means 算法核心公式&#xff08;增强专业性&#xff09; 在 “原理步骤” 中加入数学表达式&#xff0c;说明聚类目标&#xff1a; K-Means 的目标是最小化簇内平方和&#xff08;Within-Cluster Sum of Squares, W…

深入解析C#表达式求值:优先级、结合性与括号的魔法

—— 为什么2/6*4不等于1/12&#xff1f; &#x1f50d; 一、表达式求值顺序为何重要&#xff1f; 表达式如精密仪器&#xff0c;子表达式求值顺序直接决定结果。例如&#xff1a; int result 3 * 5 2;若先算乘法&#xff1a;(3*5)2 17 ✅若先算加法&#xff1a;3*(52)21…

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…

Spring——Spring相关类原理与实战

摘要 本文深入探讨了 Spring 框架中 InitializingBean 接口的原理与实战应用&#xff0c;该接口是 Spring 提供的一个生命周期接口&#xff0c;用于在 Bean 属性注入完成后执行初始化逻辑。文章详细介绍了接口定义、作用、典型使用场景&#xff0c;并与其他相关概念如 PostCon…

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…

冯诺依曼架构是什么?

冯诺依曼架构是什么&#xff1f; 冯诺依曼架构&#xff08;Von Neumann Architecture&#xff09;是现代计算机的基础设计框架&#xff0c;由数学家约翰冯诺依曼&#xff08;John von Neumann&#xff09;及其团队在1945年提出。其核心思想是通过统一存储程序与数据&#xff0…

【持续更新】linux网络编程试题

问题1 请简要说明TCP/IP协议栈的四层结构&#xff0c;并分别举出每一层出现的典型协议或应用。 答案 应用层&#xff1a;ping,telnet,dns 传输层&#xff1a;tcp,udp 网络层&#xff1a;ip,icmp 数据链路层&#xff1a;arp,rarp 问题2 下列协议或应用分别属于TCP/IP协议…

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…

React 基础入门笔记

一、JSX语法规则 1. 定义虚拟DOM时&#xff0c;不要写引号 2.标签中混入JS表达式时要用 {} &#xff08;1&#xff09;.JS表达式与JS语句&#xff08;代码&#xff09;的区别 &#xff08;2&#xff09;.使用案例 3.样式的类名指定不要用class&#xff0c;要用className 4.内…

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…

SQL进阶之旅 Day 19:统计信息与优化器提示

【SQL进阶之旅 Day 19】统计信息与优化器提示 文章简述 在数据库性能调优中&#xff0c;统计信息和优化器提示是两个至关重要的工具。统计信息帮助数据库优化器评估查询成本并选择最佳执行计划&#xff0c;而优化器提示则允许开发人员对优化器的行为进行微调。本文深入探讨了…