鸿蒙中 倒计时实现方法

1. TextTimer 组件(UI 轻量级倒计时)

适用场景:界面可见时倒计时(如页面内的临时倒计时显示)

特性:

  • 组件可见时自动计时,不可见时暂停(通过 onVisibleAreaChange控制)

  • 支持正/倒计时模式(isCountDown参数)

  • 时间格式自动转换为文本

    import { TextTimer, TimerController } from '@ohos.arkui.advanced';

    @Entry
    @Component
    struct CountDownPage {
    private controller: TimerController = new TimerController();

    复制代码
    build() {
      Column() {
        // 倒计时3秒,单位毫秒
        TextTimer({
          isCountDown: true,
          count: 3000 // 3秒
        })
          .fontSize(20)
          .onTimerEnd(() => {
            console.info('倒计时结束');
          })
      }
    }

    }

注意:退至后台时计时暂停,仅适用于前台倒计时场景。

2. 自定义组件 + 定时器(灵活控制)

适用场景 :需要精细控制状态(暂停/继续/重置)的复杂倒计时
步骤:

  • 使用 @State管理剩余时间

  • 通过 setInterval更新状态

  • 生命周期方法管理定时器启停

    @Component
    struct CustomTimer {
    @State remainingTime: number = 3; // 3秒
    private timerId: number = 0;

    复制代码
    // 开始倒计时
    startCountdown() {
      this.timerId = setInterval(() => {
        if (this.remainingTime > 0) {
          this.remainingTime--;
        } else {
          clearInterval(this.timerId);
        }
      }, 1000);
    }
    
    aboutToAppear() {
      this.startCountdown();
    }
    
    aboutToDisappear() {
      clearInterval(this.timerId);
    }
    
    build() {
      Text(`${this.remainingTime}s`)
    }

    }

备注:

  • 添加暂停/继续逻辑(保存 timerId并控制 clearInterval)
  • 使用 @StorageLink实现跨页面状态同步

3. 代理提醒(后台持久化倒计时)

适用场景 :应用退至后台仍需触发的倒计时
特性:

  • 系统代理执行,进程终止仍生效

  • 需申请权限 ohos.permission.PUBLISH_AGENT_REMINDER

    import { reminderAgentManager } from '@kit.BackgroundTasksKit';

    // 发布10秒倒计时提醒
    let timerReminder: reminderAgentManager.ReminderRequestTimer = {
    reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,
    triggerTimeInSeconds: 10, // 10秒后触发
    title: '倒计时结束',
    content: '任务已完成'
    };

    reminderAgentManager.publishReminder(timerReminder)
    .then(reminderId => {
    console.info(提醒ID: ${reminderId});
    });

4. 实况窗(Live Window)

适用场景 :实时同步倒计时到桌面卡片
优势:

  • 系统级卡片展示,无需应用保活

  • 与应用内倒计时自动同步

    // 在实况窗组件中配置倒计时属性
    LiveWindow({
    duration: 60000, // 60秒倒计时
    format: 'mm:ss' // 显示格式
    })

说明 :需在 module.json5中声明 "abilities.formEnabled": true。

注意事项

  1. 后台限制 :setInterval在应用退后台时会被冻结,需依赖代理提醒或实况窗实现持久化。
  2. 权限规范:代理提醒需向华为申请,滥用可能导致审核失败。
  3. 精度选择 :秒级精度用 setInterval(1000),毫秒级需结合requestAnimationFrame。

根据需求选择合适方案:轻量级选 TextTimer,需后台持久化选 代理提醒 或 实况窗 ,复杂交互场景用 自定义组件。

相关推荐
Sirius_Ji11 小时前
# 一份鸿蒙原生支持硬解的 ffmpeg 开发基座
harmonyos
贾伟康12 小时前
HarmonyOS API 26 Navigation路由栈上限:stackSizeLimit、过载保护与容量观测
harmonyos·arkts·navigation·navpathstack·api26
江华森18 小时前
把鸿蒙云手机调试的 5 个坑写成 Skill:12 项检查清单与报错决策树
harmonyos
木木子2219 小时前
用华为云码道构建校园导航应用「新生通」:从需求分析到工程落地
华为·华为云·harmonyos
贾伟康20 小时前
HarmonyOS API 26 Navigation 自适应模式:mode、分栏切换与窗口断点治理
harmonyos·arkts·arkui·navigation·自适应布局
贾伟康20 小时前
【转盘决定吧|07】HarmonyOS ArkTS 6.0.2.130 趣味题库:场景分类、随机选择与详情页解耦
harmonyos·arkts·路由·数据建模·arkui
贾伟康21 小时前
【电路实验模拟|03】HarmonyOS ArkTS 交通灯实战:用定时状态切换红黄绿灯
harmonyos·arkts·canvas·arkui·交通灯
贾伟康2 天前
HarmonyOS API 26 嵌套 Navigation:getParent、父子栈边界与返回分发
harmonyos·arkts·navigation·嵌套路由·navpathstack
行者-全栈开发2 天前
【鸿蒙心迹】多线程并发实战——TaskPool 与 Worker 选型与踩坑(HarmonyOS 7.x)
华为·harmonyos·多线程并发·worker·taskpool·线程通信·harmonyos 并发
OH_TPC2 天前
@ohos/aki 源码解读(一):一行绑定背后,宏、模板与索引分发
harmonyos