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/