记录下今天写计时器尝试到快要奔溃才出来的结果。
大家应该都知道setBase(long base)中的参数是毫秒数,SystemClock.elapsedRealtime()是系统启动到现在的毫秒数。
通过查看setBase的源代码,可以发现,
public void setBase(long base) {
mBase = base;
dispatchChronometerTick();
updateText(SystemClock.elapsedRealtime()); // 查看此方法 <span style="font-family: Arial, Helvetica, sans-serif;">long seconds = now - mBase; 减去了系统启动到现在的毫秒数
}</span>
<pre name="code" class="java">private void init() { mBase = SystemClock.elapsedRealtime(); updateText(mBase); }<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
那么,
private Chronometer timer;
timer.setBase(SystemClock.elapsedRealtime()-second*1000); //second为我想要显示的秒数,所以此处要乘以1000
这个地方,照上面的代码,应该是加才对,但是在很多次尝试后发现,是应该用,系统启动到当前的时间 减去 你真正想要显示的时间
暂时还没有想通是为什么,后期如果想到了,再来补充