2012-10-16 89 views
0

公共類我有一個公共類僅包含公共靜態成員。我知道這是不是最好的事情,但我只是想知道爲什麼在我的Android上,如果我暫停應用程序,打開其他幾個人並回到我的,所有變量似乎是(空)。只有公共靜態成員

問題:

  1. 是不是因爲某種由Android取得了內存釋放的?
  2. 那麼什麼可能是一個更好的方法來保持這樣的變量?
  3. 擴展應用程序的類是一個很好的選擇嗎?

這裏是我的代碼:

public class Session { 

public static String ID = null; 
public static String UNIQID = null; 
public static String TOKEN = null; 
public static String SESSIONID = null; 
} 
+0

您已將null分配給您在此顯示的所有變量。你在說哪個變量?當您使用會話類和公共靜態成員 –

+0

使用SharedPreferences保存您的變量,因爲機器人可以在必要時清理內存。但我不覺得有必要將所有這些信息放在SharedPreferences中(以上僅爲示例)。單身人士或應用程序類更好/最差的選擇? – Houcine

+0

@BheshGurung他們得到的 – shkschneider

回答

1

隨着應用程序的過程中收集內存可能會在任何時候被破壞,這些靜態實例很重要確實收集垃圾。

如果你把這些靜態變量在自定義的應用程序對象,同樣適用,除​​非你的每個應用程序獲取(重新)創造了時間初始化它們在應用程序的onCreate功能。

你應該跟蹤使用或者SharedPreferences或SQLite數據庫持久性數據。

如果這些變量都太複雜,無法存儲一樣,那麼你可能要考慮使用單(不推薦子類的應用,因爲它曾經是)。

public class MySingleton { 

    public static MySingleton getInstance(Context context) { 
    if (instance==null) { 
     // Make sure you don't leak an activity by always using the application 
     // context for singletons 
     instance = new MySingleton(context.getApplicationContext()); 
    } 
    return instance; 
    } 

    private static MySingleton instance = null; 

    private MySingleton(Context context) { 
    // init your stuff here... 
    } 

    private String id = null; 
    private String uniqueId= null; 
    private String token = null; 
    private String sessionId = null; 
} 
+0

好了,所以應用程序類具有相同的GC相關的問題。謝謝 – shkschneider

+0

請參閱編輯示例代碼的答案。 –

+0

我有一些數據但很複雜。辛格爾頓是我的最佳選擇。 – shkschneider

0
  1. 是,機器人可能需要

  2. 時,可能是這樣的SharedPreferences

+0

感謝以後設置 – shkschneider

+0

我明白了痛苦,應用程序類作爲靜態字段總是很脆弱。我會去共享偏好或SQL Lite數據庫。 – kosa

+0

好的。但SharedPreferences需要一個上下文,所以確實有點痛苦。 – shkschneider