2011-11-16 105 views
4

我有一個益智遊戲的機器人。當拼圖開始我取當前時間:安卓遊戲 - 跟蹤時間

long startTime = System.currentTimeInMillis()

當玩家完成了拼圖,我又花時間,減去的起始時間,制定出經過的時間。這沒關係。

我的問題是當應用程序中斷時該怎麼做。例如通過電話。目前,這個謎題自動保留在之前的狀態(如同它在視圖中一樣)。但是,計算completionTime = currentTime - startTime現在將無效。

我已經嘗試使用onSaveInstaceState(Bundle)保存已用時間。但重新進入應用程序時不會調用其對應的onRestoreInstanceState(Bundle)。相反,onResume()方法被調用?我讀過這是因爲該應用程序沒有被「殺死」,而是仍然在記憶中。在「殺死」的情況下,我會想象視圖的狀態也會丟失?我不認爲在這種情況下跟蹤觀點是非常必要的,所以我也不會擔心時間。

有沒有辦法從onResume()讀取一個包,我應該只實現一個共享首選項?

我想避免更新遊戲循環中的經過時間,因爲這看起來效率不高。

回答

9

我會建議不要使用SharedPreference。


你只需要2個字段:startTimeelapsedTime

當玩家開始,初始化elapsedTime0startTimeSystem.currentTimeMillis()

onPause()被調用時,使用

elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime); 

初始化elapsedTimeonResume()被調用時,初始化startTimeSystem.currentTimeMillis()

當玩家完成,時間是

elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime); 

請,如果邏輯有一個缺陷,評論(:

注:存在一種方法只使用一個!但是我們會保留這些讓讀者去發現。

+0

如果系統重新啓動,變量,將受到一擊,我想。所以考慮到遊戲不會死機或手機沒有重啓,你的想法很好。所以在這些極端情況下,存儲時間是強制性的。 –

+0

如果遊戲被殺死,一切都消失了!而且如果你選擇保存遊戲的狀態!保存這兩個變量。它比SharedPreferences –

+0

好,是的,你再對,只要遊戲沒有保存。但遊戲通常具有保存功能,我在這方面正在考慮。 –

2

對我來說,共享偏好似乎更好。

  1. 計算onPause()的時差,當遊戲進入後臺時,假設用戶已經在玩遊戲。將此差異添加到上次在共享首選項中的時間並再次存儲它。

  2. onResume()重新啓動時鐘,如有必要重複步驟1。

我希望你明白了。

+0

謝謝你Yashwanth :) – Wozza