A - 保存屏幕旋转日期/时间的正确方法是什么
B - 为什么我的实现会在节省的时间内增加20秒?
我正在处理一些计算。我跟踪指定时期(abegtim日期)的开始和指定时期(aendtim日期)的结束。每当我从GPS相关服务收到新的GPS读数时,aendtim都会更新。我不能允许屏幕旋转来重置我的abegtim,但这就是正在发生的事情。 (string2date是我的函数)
我在旋转时测试了下面的代码,abegtim来自onRestoreInstanceState,其新时间比进入onSavedInstanceState时晚20秒。
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
savedInstanceState.putString("abegtim", date2string("yyyy-MM-dd HH:mm:ss",abegtim));
Log.e("savedinst B4 abegtim " + abegtim," ");
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
String strabegtim = " ";
strabegtim = savedInstanceState.getString("abegtim", strabegtim);
abegtim = string2date("yyyy-MM-dd HH:mm:ss",strabegtim);
Log.e("savedinst AFTR abegtim " + abegtim," ");
}
E / savedinst B4 abegtim星期二年11月22 8点20分16秒PST 2016:
E / savedinst AFTR abegtim星期二年11月22 8时二十○分36秒PST 2016:
答案 0 :(得分:1)
不确定为什么会发生这种情况,但转换为字符串听起来会让问题过于复杂。
您可以改为使用Date对象的select(2)值。
假设abegtim
的类型为Date
:
long timestamp = abegtim.getTime();
和
abegtim = new Date(timestamp);
另外,请确保在以后的回调中不使用默认值(现在)覆盖onRestoreInstanceState
到abegtim
设置的值。
即,如果您在abegtim
回调中设置onCreate
的值,请确保仅在savedInstanceState
为空时设置它:
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
abegtim = new Date();
}
}