4

我有一个应用程序,我在其中向用户显示他正在做什么的计时器。每当活动进入后台时(无论是通过主页按钮还是返回),我都会保存该时间(以秒为单位),当活动恢复时,我想从同一时间继续运行计时器。用户可能从列表中选择不同的项目,时间不同,他也可能会关闭手机......我可以保存计时器的时间,但是我不能设置它的开始时间。

Chornometer API中,该方法setBase()指出:

设置计数定时器所参考的时间。

据我了解,这意味着如果我将此值设置为 currentTime,它将从 0 开始计数。现在,如果我希望它以值 17s 开始,我考虑将基数设置为 currentTime 减去 17 秒前的时间. 所以像:

setBase(system.currentTimeMillis() - (17 * 1000)).

但是这不起作用,它总是以 0 开头!

我在这里阅读了其他一些主题,但没有一个答案有帮助。它总是以0开头!

提前致谢。

4

2 回答 2

9

我认为您将不得不自己跟踪一些时间标记。

Chronometer myChrono;
long baseTime;
long stopTime;
long elapsedTime;

设置基准时间时,您要使用:

baseTime = SystemClock.elapsedRealtime() - stopTime;
myChrono.setBase(baseTime);

当您想查看已经过去了多少时间时,请使用:

elapsedTime = SystemClock.elapsedRealtime() - myChrono.getBase();

查看 SystemClock文档

于 2013-05-10T08:55:10.613 回答
6
setBase(system.currentTimeMillis() - (17 * 1000))

应改为

setBase(SystemClock.elapsedRealtime() - (17 * 1000))

一般来说:

mChronometer.setBase(SystemClock.elapsedRealtime() - (nr_of_min * 60000 + nr_of_sec * 1000)))

希望这会为你们节省很多时间:)

于 2013-05-27T14:41:36.133 回答