2010-08-25 35 views
1

我有一個像Clapperboard一樣的應用程序,其中我使用了一個變量,我每隔一毫秒就去i ++(我需要毫秒來顯示每秒幀數,並且計時器只更新一次每秒),然後以HH:MM:SS:FF格式顯示它。我也有一個退出按鈕,它的推移Android onSaveInstance狀態不工作(對我來說)

if (item.getTitle() == "Quit") { 
Process.killProcess(id); 
} 

的問題是,我希望應用程序記住我的價值,當我按下退出,那麼計時器會在同一點是,如果退出前啓動我再次開始。 我試圖

public void onSaveInstanceState(Bundle outState) { 
outState.putLong(MILLISECONDS, i); 
super.onSaveInstanceState(outState); 
} 

然後通過

public void onStart(Bundle savedInstanceState) { 
super.onStart(); 
i = savedInstanceState.getLong(MILLISECONDS); 
} 

public void onRestoreInstanceState(Bundle savedInstanceState) { 
super.onRestoreInstanceState(savedInstanceState); 
i = savedInstanceState.getLong(MILLISECONDS); 
} 

調用它,但它不工作。 另外,如果我去

onCreate(Bundle savedInstanceState) { 

... 

i = savedInstanceState.getLong(MILLISECONDS); 

... 

} 

應用程序部隊關閉。 有什麼想法我做錯了,請嗎? 非常感謝。

回答

0

你並不是真的在做Android方式:-)不要殺了你的應用程序,而是回到家中。在這種情況下,將調用saveinstancestate。

+0

所以......是因爲我在殺死它:|?該死的...我花了2-3天的時間試圖解決這個問題,剛纔我想起了這個問題,當我發佈這個問題時可能很重要。關於不這樣做的Android方式...我知道,但我喜歡有一個退出按鈕:D。如果我退出應用程序,是否仍有可能這樣做?謝謝你的啓發Sebi。 – bboylalu 2010-08-25 16:54:55

+0

是的,但你退出了錯誤的方式。使用以下代碼可以正確退出: moveTaskToBack(true); – Sebi 2010-08-25 17:43:08

+0

請勿使用moveTaskToBack(true)。完成()' – Falmarri 2010-08-25 19:42:01

0

,如果你增加了一些更多的細節,你的問題這將有助於:

「它不工作」 - >究竟它不工作?是savedInstanceState爲空嗎?是否通過例外?
「應用程序部隊關閉」 - >您能否提供引發的確切異常或崩潰周圍的logcat文本?

這就是說,saving persistant state文檔的這一部分可能會有所幫助。有兩種不同的時間來保存狀態,在onPause和onSavedInstanceState中。 onPause是更可靠的一個,因爲它被稱爲活動生命週期的一部分。

如果保存在onSaveInstanceState中,則應該在onCreate中重新創建。然而,正如Sebi指出的那樣,你殺死應用程序的方式可能會阻止onSaveInstanceState被調用。

如果你想結束你的活動,只需調用finish()。

+0

因此,如果我想在onCreate中重新創建它,我只需輸入** i = savedInstanceState.getLong(MILLISECONDS); **,對不對?如果不是,我會將我作爲持久狀態保存在文件中(以及可供用戶使用的其他數據),或者刪除退出按鈕。感謝您的回覆。 – bboylalu 2010-08-25 17:07:22

+0

該鏈接在您的答案中無法正常工作...您可以更新它嗎? – Sebi 2010-08-25 17:44:47

+0

是的,如果onSaveInstance狀態正確執行。您不必刪除退出按鈕(儘管這不是您在Android應用程序中常見的東西),而是通過完成()而不是強制退出來退出。 – 2010-08-25 17:45:44

相關問題