2012-06-08 32 views
2

我想用SharedPreferences來保存一些變量。在我的onCreate()方法中,我使用SharedPreferences初始化我的變量,並且當應用程序結束時我想要存儲這些變量。我將這些代碼放在onTerminate()方法中,但變量永遠不會被存儲。我認爲onTerminate()方法從來沒有被調用過,因爲我也看到這個方法的評論說// not guaranteed to be called。那麼如何才能在停止應用程序之前保存我的變量的狀態?我知道如何,我只是不知道在哪裏放置我的代碼。如何使用onTerminate()方法,android?

回答

4

事實上,爲了安全起見,你應該把它調用的onPause()後保存的onPause東西(),因爲(至少前3.0)的過程可以通過OS殺死。這意味着onStop()和onDestroy()可能會或可能不會被調用。

在任何情況下,沒有任何保證的onDestroy()永遠不會被調用。如果操作系統決定殺死你的進程,它不會在任何活動上調用onDestroy()。

+0

嗯,我嘗試使用的onPause()。當我重寫它,並在開始super.onPause()編譯器說無法解析方法。如果我不重寫並且不把super.onPause(),編譯器說這個方法從來沒有用作警告。我很抱歉,如果這聽起來瑣事,我很新的android編程。在另一個項目中,它工作得很好.. – donparalias

+0

聲音像onPause()的方法簽名與您試圖覆蓋的onPause()方法不同。這也是爲什麼它永遠不會被召喚。您的方法簽名必須如下所示:'public void onPause()'。請檢查。 –

+0

你的方法簽名是什麼意思?在我的代碼,我只是把這個: @Override 公共無效的onPause(){ super.onPause(); } – donparalias

0

您可以在onPause做()也一樣,這取決於你所需要的。 在這種情況下,每次您的應用程序失去焦點時它都會保存。

1

,我想,當應用程序結束存儲這個變量。

這不起作用,因爲當「應用程序結束」時你無法控制。

或者:

  • 保存數據時,數據的變化,或

  • 保存數據時,用戶會告訴你(例如,通過某種形式的保存動作欄項目的),或

  • 保存時,你修改的數據活動的onPause()被稱爲數據

+0

那麼我嘗試使用onPause()。當我重寫它,並在開始super.onPause()編譯器說無法解析方法。如果我不重寫並且不把super.onPause(),編譯器說這個方法從來沒有用作警告。我很抱歉,如果這聽起來瑣事,我很新的android編程。在另一個項目中,它工作得很好.. – donparalias

+0

@ user1372498:'onPause()'是'Activity'上的一個方法。正如我在回答中所寫的那樣,「當您修改數據的活動的onPause()'**時,保存數據稱爲**」。 – CommonsWare

+0

你是對的,但我有20個不同的活動來處理這些數據,並與應用程序類「溝通」。所有變量都是本地的,所以如果我保存在活動中,應用程序類中的變量將不會被存儲。所以我想我必須使用全局變量,所有活動都可以看到?這就是爲什麼我問如果在應用程序停止之前是否有某種方法可以做某些事情。 – donparalias

2

您不應該使用此功能。

此方法是在仿真過程的環境中使用。它永遠不會在生產型Android設備上調用,通過簡單地殺死進程來刪除進程;此時不執行用戶代碼(包括此回調)。

Source