不鼓励使用计时器 ScheduleAtFixedRate

问题描述 投票:0回答:1

我发现强烈建议不要使用scheduleAtFixedRate,因为当Android进程被缓存时,它可能会导致意外的行为(当进程从缓存变为未缓存时,任务可能会意外地快速连续执行数百或数千次)。有人可以详细说明一下吗? Android 中关于 ScheduleAtFixedRate 的具体问题是什么?建议使用哪些替代方法来处理 Android 应用程序中的周期性任务?

android timer
1个回答
0
投票

文档规定了

Timer.scheduleAtFixedRate()
的行为:

在固定速率执行中,每次执行都是相对于初始执行的预定执行时间来安排的。

因为

TimerTask
的执行被安排在相对于初始调度时间的精确时刻,所以当进程未缓存时,将会有许多计划执行需要立即执行,因为它们的计划执行时间在过去。

想象一下以下时间:

  • 0:00:启动应用程序并使用
    scheduleAtFixedRate(timer, 10000L, 10000L)
  • 安排执行
  • 0:10:第一次执行
  • 0:15:用户离开应用程序并且进程被缓存
  • 0:20:第二次执行被错过
  • 0:25:用户恢复应用程序并且进程未缓存
  • 0:25:第二次执行 ← 这可能是意外的,以及为什么会出现 Lint 警告
  • 0:30:第三次执行
© www.soinside.com 2019 - 2024. All rights reserved.