2016-11-22 148 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

我用你的方法。它修復了它。謝謝。 –