Android 中的计时器 - 如何在 phone 或应用程序关闭时继续计数

Timer in Android - how to keep counting even when phone or app is off

我正在尝试实现一个计时器,它只计算自按下开始后经过的时间。即使 app/phone 关闭,我也需要保留此计数器。我如何实现这一目标?当应用程序关闭时将当前时间存储在某处,然后当应用程序再次打开时检索此数据?如果这是一个好方法,我该如何实施这个解决方案?我希望有人有一些意见。

我已经使用 Handler 实现了我的 timer/counter(我在 Whosebug 上的一个答案中看到了这个解决方案)

你应该使用 Alarm Manager。它利用 PendingIntent 向您应用的组件发送通知,例如 BroadcastReceiver 您可以在其中处理延迟的作业。

如果您真的担心自按下 "start" 以来的时间,您可能需要 elapsedRealtime - 系统时钟可以被操纵,但即使经过的时间也会随着 phone,所以要小心,但这应该可以满足您的大部分需求。

看到这个post:Know if uptime timer is reset or Android has been rebooted

执行此操作的一种方法是在计数器开始时保存系统 Time,然后在计数器结束时再次保存 Time

您可以通过比较开始时间和结束时间来了解已经过去了多少时间。

它可能看起来像这样:

Calendar c = Calendar.getInstance();
int startTime = c.get(Calendar.SECOND);

...

Calendar c = Calendar.getInstance();
int endTime = c.get(Calendar.SECOND);

int secondsElapsed = endTime - startTime;

Edit:此方法的主要缺点是它不考虑时区更改或系统时间更改。如果这些都不关心你,它工作正常。


编辑 2:要保存 startTime 以使其在应用程序关闭时不丢失,请使用 SharedPreferences。可以看到使用 SharedPreferences 存储和检索值的示例 here.