2011-05-14 127 views
4

我有一個正在運行的android應用程序。過了一會兒,當用戶通過運行別的東西退出應用程序並返回到我的應用程序時,應用程序中的靜態變量似乎已被垃圾回收。被垃圾收集的變量

在堅果殼中,我在應用程序啓動時保持輸入的用戶名/密碼,並將它們保存在一個靜態變量中,並將它們用於與服務器進行通信。我需要在應用程序重新啓動時查找它們何時收集垃圾(以便將它們重定向到登錄視圖)或防止垃圾收集。想法?

+1

嚴格地說,它是垃圾收集的對象而不是變量。當你說他們已經被垃圾收集了,你的意思是他們的價值已經變爲零? – davmac 2011-05-14 07:06:35

+1

您可以檢查onResume變量是否設置爲空,如果他們是那麼您需要再次請求憑據。否則下面的答案提供了一些好的解決方案 – Lumis 2011-05-14 13:16:36

+0

@davmac是的,我的意思是obejcts太:) – 2011-05-14 18:03:32

回答

4

你可以實現你的第二個場景的一種方法是通過實現你自己的繼承Application的類,並在你的清單中指定它。你可以把你的靜態變量放在那個類中。 Android會在啓動你的進程時創建該類的一個實例,並且只要進程還活着,那個實例就會處於活動狀態。

因此,如果您在該類中有一個簡單的布爾值,表示登錄是否已執行,那麼您現在有一種可靠的方法可以在任何時候檢查是否應該引導用戶登錄活動,或嘗試使用內存中的用戶名/密碼。另外,您可以使用標準的Android持久性組件之一(共享首選項文件,SQLLite,AccountManager,OBB,憑證存儲等)在整個流程重新啓動時保留憑據。但是請注意,這樣做會引發一系列新問題,包括如何妥善保護用戶憑證的持久副本,以防止其他應用程序(特別是在根源電話上)未經授權的訪問。

+0

靜態變量垃圾收集我甚至在applciatino內 – GorillaApe 2013-06-04 23:05:15

2

我建議不要試圖「阻止這個班級被垃圾收集」。相反,按照預期在框架內工作。

(沒有解決用戶身份驗證或證書管理的主題...)

Android提供用於存儲數據,在http://developer.android.com/guide/topics/data/data-storage.html概述了幾個選項。針對您的情況,使用偏好設置可能是體面的,輕量級的,易於實施的選項。

另外,請注意,如果應用程序具有使用這些值的Activity,則將值保留在Activity的成員中可能會很好地解決問題。如果是這樣,那麼請注意可以使用onSaveInstanceState(Bundle)和onRestoreInstanceState(Bundle)。