java - android onSavedInstanceState保存和恢复时间

标签 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 2016 年 11 月 22 日星期二 08:20:16(太平洋标准时间):
E/savedinst AFTR abegtim 2016 年 11 月 22 日星期二 08:20:36(太平洋标准时间):

最佳答案

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

您可以使用timestamp而是 Date 对象的值。

假设 abegtim 的类型为 Date:

long timestamp = abegtim.getTime();

abegtim = new Date(timestamp);

另外,请确保您不会在稍后的回调中使用默认值(当前)将 onRestoreInstanceState 设置为 abegtim 的值覆盖。 即,如果您在 onCreate 回调中设置 abegtim 的值,请确保仅在 savedInstanceState 为 null 时设置它:

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

关于java - android onSavedInstanceState保存和恢复时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747807/

相关文章:

java - 打开的文件太多 : how many are open, 它们是什么,JVM 可以打开多少个

java - AWS RDS 数据库实例安全开源数据完整性检查器

android - 硬件加速 Canvas

java - 当我尝试从 Intent putExtra 时,出现空指针异常

java - 将 JSON 发送到 Firebase 云消息传递

Java接受新数组作为输入,尽管我给出了两次源代码

java - 检查/比较类的任何实例的方法

Java 相当于 PHP str_word_count?

android - 什么是 Root View ?

android - Firebase 远程配置 : NullPointerException on Map. keySet()