HarmonyOS鸿蒙Next中应用退到后台一段时间,timer setInterval被挂起,导致倒计时停止了

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS鸿蒙Next中应用退到后台一段时间,timer setInterval被挂起,导致倒计时停止了 验证码倒计时的逻辑,通过setInterval实现。但是退到后台后,setInterval没有执行了,回到前台后才继续执行,导致倒计时完全不准。

3 回复

原因是未开启长时任务,程序放在后台触发onPageHide()后,setInterval打印日志10秒左右就会停止运行被挂起。

应用被挂起后,不是立马回收资源,只是任务停止运行应用挂起,比如应用setInterval仍在。

30分钟后回到前台,应用恢复将继续执行任务,但在后台的30分钟并不会执行任务。

需要申请长时任务,只要开了长时任务并成功触发条件,在后台和锁屏才可以成功执行任务。

长时任务参考链接:开发者指南

setInterval确实不支持在锁屏或者后台场景下工作,长时任务也不适用,规格如此;

针对倒计时可使用TextTimer组件 参考链接:TextTimer组件

参考示例代码如下:

// xxx.ets

@Entry
@Component
struct TextTimerExample {
  textTimerController: TextTimerController = new TextTimerController()
  @State format: string = 'mm:ss.SS'

  build() {
    Column () {
      TextTimer({
        isCountDown: true,
        count: 30000,
        controller: this.textTimerController
      })
      .format(this.format)
      .fontColor(Color.Black)
      .fontSize(50)
      .onTimer((utc: number, elapsedTime: number) => {
        console.info('textTimer notCountDown utc is:' + utc + ', elapsedTime: ' + elapsedTime)
      })

      Row () {
        Button("start").onClick(() => {
          this.textTimerController.start()
        })

        Button("pause").onClick(() => {
          this.textTimerController.pause()
        })

        Button("reset").onClick(() => {
          this.textTimerController.reset()
        })
      }
    }
  }
}

更多关于HarmonyOS鸿蒙Next中应用退到后台一段时间,timer setInterval被挂起,导致倒计时停止了的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,应用退到后台后,系统会优化资源以节省电量,因此可能会挂起一些后台任务,包括 setInterval 定时器。这是因为鸿蒙系统的后台管理机制会限制应用在后台的运行,以防止不必要的资源消耗。

具体来说,当应用进入后台时,系统会暂停应用的主线程和相关的任务执行,包括 setInterval 定时器。这是为了确保系统资源的合理分配,并延长设备的电池寿命。因此,倒计时可能会因为定时器被挂起而停止。

要解决这个问题,可以考虑使用鸿蒙提供的后台任务管理机制,比如使用 BackgroundTaskManager 来申请后台任务执行权限,或者使用系统提供的其他定时器机制,如 WorkScheduler,来确保定时任务在后台也能继续执行。

在HarmonyOS鸿蒙Next中,应用退到后台时,系统为了节省资源会挂起setInterval等定时器。解决方法包括:

  • 使用后台任务:通过Background Task Manager申请后台任务,确保应用在后台仍能执行定时操作。
  • 前台服务:启动前台服务,保持应用在前台运行。
  • 系统闹钟:使用AlarmManager设置系统闹钟,倒计时结束后唤醒应用。
  • 本地通知:倒计时结束时发送本地通知,提醒用户。

根据应用需求选择合适方案,确保倒计时功能在后台正常运行。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!