2012-10-16 91 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