android onSavedInstanceState保存和恢复时间

时间:2016-11-22 17:14:04

标签: java android

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:

1 个答案:

答案 0 :(得分:1)

不确定为什么会发生这种情况,但转换为字符串听起来会让问题过于复杂。

您可以改为使用Date对象的select(2)值。

假设abegtim的类型为Date

long timestamp = abegtim.getTime();

abegtim = new Date(timestamp);

另外,请确保在以后的回调中不使用默认值(现在)覆盖onRestoreInstanceStateabegtim设置的值。 即,如果您在abegtim回调中设置onCreate的值,请确保仅在savedInstanceState为空时设置它:

void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if (savedInstanceState == null) {
    abegtim = new Date();
  }
}