探秘鴻蒙 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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84354.shtml
英文地址,請注明出處:http://en.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;而優化器提示則允許開發人員對優化器的行為進行微調。本文深入探討了…