的Android onSavedInstanceState保存和恢复时间
问题描述:
A - 什么是节省屏幕旋转的Android onSavedInstanceState保存和恢复时间
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分一十六秒PST 2016年
E/savedinst AFTR abegtim周二11月22日八时20分36秒的PST 2016年
答
不知道为什么会这样,但转换为字符串听起来像是过度复杂的问题。
您可以改用Date对象的timestamp值。
假设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();
}
}
感谢。 “putDate”中的哪个数据类型和:getDate“for onSavedInstance”将允许我放置/保存时间戳? –
我想我明白了。我可以使用putSerializable() getSerializable()来放置/获取日期。谢谢。 –
我用你的方法。它修复了它。谢谢。 –