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.
我正在尝试实现一个计时器,它只计算自按下开始后经过的时间。即使 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.