有关Chronometer的问题 在线 ,急!!!!
我现在在一个Activity中设置了一个Chronometer我希望做的是在我退出之后保存值,然后下次进入这个页面的时候接着上次计时
比如说退出的时候是00:06
那么我下次进入的时间也从 00:06开始
这个怎么实现呢?
我现在用的是
private SharedPreferences sp;
private SharedPreferences.Editor editor;保存
在onDestroy(){
mChronometer.stop();
long stime = mChronometer.getBase() ;
editor.putLong("chronometer", stime);
editor.commit();
}
然后在下次进来的时候
long jixuchronometer = sp.getLong("chronometer", 0);
mChronometer.setBase(jixuchronometer);
mChronometer.start();
现在的问题是我退出的这一段时间,他依然在计时,并没有停止啊,求解
我的qq,673305735,在线等,着急着急着急 --------------------编程问答-------------------- 对这个类Chronometer不熟悉,是否还要调用其他相关函数? --------------------编程问答-------------------- 自己顶 --------------------编程问答-------------------- 楼主你没有明白Chronometer的setBase\getBase是什么意思。
Base指的是Chronometer的起始时间,Chronometer显示的时间是当前时间和起始时间的间隔。
默认情况下,Chronometer调用以调用start的时间做为base,如果指定了,就以指定时间做为base。
换句话说,对于一个Chronometer运行过程中,它的base值是固定的(未调用setBase的情况下)。
在你的代码中,每次写入SharedPreferences的base值都是同一个。按照上面的定义,显示的值自然只跟系统时间有关,窗口关闭的时间也会计算在内了。
上文中系统时间使用的是这个SystemClock.elapsedRealtime(),它指的是系统已经启动之后的毫秒数
解决方法:
destroy时,存入Chronometer.stop执行是的SystemClock.elapsedRealtime()与Chronometer.getBase()只差
oncreate时,载入这个值val,将(SystemClock.elapsedRealtime() - val)设置为Chronometer的base
代码实现
// onCreate中
long lSaved = sp.getLong("chronometer", 0);
if (lSaved != 0)
{
chronometer1.setBase(SystemClock.elapsedRealtime() - lSaved);
}
chronometer1.start();
//onDestroy中
chronometer1.stop();
long stime = SystemClock.elapsedRealtime() - chronometer1.getBase() ;
editor.putLong("chronometer", stime);
editor.commit();
补充:移动开发 , Android