2016-11-22 122 views
0

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年

回答

1

不知道为什么会这样,但转换为字符串听起来像是过度复杂的问题。

您可以改用Date对象的timestamp值。

假设abegtimDate类型:

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(); 
    } 
} 
+0

感谢。 “putDate”中的哪个数据类型和:getDate“for onSavedInstance”将允许我放置/保存时间戳? –

+0

我想我明白了。我可以使用putSerializable() getSerializable()来放置/获取日期。谢谢。 –

+0

我用你的方法。它修复了它。谢谢。 –