Chronometer控件在使用时,一般都会SystemClock.elapsedRealtime() 这个函数一起使用,这个函数是返回手机从开机到现在经过了多长时间,类型为long。
chronometer.setBase(SystemClock.elapsedRealtime();
就是将当前开机时间的瞬时值作为定时器起始时间 ,而计时的原理就是用开机经过的时间减去定时器的时间,这两者的差就是计时的时长。
那如果程序退到后台是,我希望停止计时,当再次进入程序时继续计时,如记录用户在线时间,此时应该怎么办呢?
调用start(); 函数定时器开始计时,调用stop(); 函数当然就应该是停止啦(字面理解),但是stop() 的停止是停止视图计时(变动),但是后台其实还是在计时,毕竟依赖的是系统开机时间来计时的,stop() 方法是不可能把开机时间停止下来的,那么应该怎么办呢?
换个角度想一想,我只要在程序退到后台是把记时的时间保存下来,当程序再切回来的时候加在定时器上不就好了吗?
但是这就引出了一个问题,这个保存下来的时间到底怎么加上去。
Chronometer的起始时间都设置为程序打开时的瞬时系统启动的时间,那么只要把Chronometer的起始时间在设置的时候比系统启动时间少X 秒,X 是程序退到后台时已经记录的时长,这时候系统启动时间 - Chronometer起始时间 = X,就是从X秒开始计时了。
chronometer计时器再次进入程序是加载的时间为什么是减去之前记录的时间而不是加
最新推荐文章于 2021-11-27 16:48:09 发布