我有一个应用程序,我正在向用户显示他正在做的事情的计时器。 每当活动进入后台(通过主页按钮或返回)时,我保存该时间(以秒为单位),当活动恢复时,我想继续从同一时间运行计时器。用户可能会从列表中选择不同的项目,时间也不同,他也可能会关闭手机... 我可以节省计时器的时间,但我无法用开始时间设置它。
从Chornometer API开始,方法setBase()
声明:
设置计时计时器参考的时间。
根据我的理解,这意味着如果我将此值设置为currentTime,它将从0开始计数。 现在,如果我希望它以值17s开始,我考虑将基数设置为当前时间减去17秒前的时间。如下所示:
setBase(system.currentTimeMillis() - (17 * 1000)).
然而这不起作用,它始终以0开始!
我在这里阅读了其他几个主题,但没有一个答案有帮助。它始终以0开始!
提前致谢。
答案 0 :(得分:7)
我认为你必须自己跟踪一些时间标记。
Chronometer myChrono;
long baseTime;
long stopTime;
long elapsedTime;
设置基准时间时,您需要使用:
baseTime = SystemClock.elapsedRealtime() - stopTime;
myChrono.setBase(baseTime);
如果您想查看已经过了多长时间,请使用:
elapsedTime = SystemClock.elapsedRealtime() - myChrono.getBase();
查看SystemClock doc。
答案 1 :(得分:5)
setBase(system.currentTimeMillis() - (17 * 1000))
应改为
setBase(SystemClock.elapsedRealtime() - (17 * 1000))
一般来说:
mChronometer.setBase(SystemClock.elapsedRealtime() - (nr_of_min * 60000 + nr_of_sec * 1000)))
希望这会节省很多人的时间:)