Java 只有公共静态成员的公共类

Java 只有公共静态成员的公共类,java,android,Java,Android,我有一个只包含公共静态成员的公共类 我知道这不是最好的做法,但我只是想知道为什么在我的Android上,如果我暂停应用程序,打开一些其他应用程序,然后返回到我的应用程序,所有变量似乎都是(null) 问题: 这是因为安卓系统释放了某种内存吗 那么,有什么更好的方法来保存这些变量呢 扩展应用程序的类是一个好的选择吗 这是我的密码: public class Session { public static String ID = null; public static String UNIQID

我有一个只包含公共静态成员的公共类

我知道这不是最好的做法,但我只是想知道为什么在我的Android上,如果我暂停应用程序,打开一些其他应用程序,然后返回到我的应用程序,所有变量似乎都是(null)

问题:

  • 这是因为安卓系统释放了某种内存吗
  • 那么,有什么更好的方法来保存这些变量呢
  • 扩展应用程序的类是一个好的选择吗
  • 这是我的密码:

    public class Session {
    
    public static String ID = null;
    public static String UNIQID = null;
    public static String TOKEN = null;
    public static String SESSIONID = null;
    }
    
  • 是的,android可能会在需要时收集内存

  • 可能有点像SharedReferences


  • 由于您的应用程序进程可能随时被破坏,这些静态实例可能确实会被垃圾收集

    如果将这些静态变量放在自定义应用程序对象中,则同样适用,除非每次(重新)创建应用程序时在应用程序的onCreate函数中初始化它们

    您应该使用SharedReferences或SQLite数据库跟踪持久数据

    如果这些变量太复杂而不能像这样存储,那么你可能需要考虑使用一个单独的子类(子类的应用程序不像以前那样被推荐)。


    谢谢但我觉得没有必要把所有这些信息都放在SharedReferences中(上面只是一个例子)。是单例还是应用程序类更好/最差的选择?我理解其中的痛苦,应用程序类作为静态字段总是容易受到攻击。我会选择共享首选项或SQLLite数据库。好的。但是SharedReferences需要一个上下文,所以确实有点麻烦。你必须以某种方式保存状态,因为Android不会为你这样做。SharedPrefs只是一种可能的方法。请看这里:为什么上下文会让人痛苦?@Fildor嗯,它并不复杂,我只是懒惰,因为以前只需
    会话就可以轻松完成。有些东西
    ^^^^但我明白了,您为此处显示的所有变量指定了null。你说的是哪一个变量?使用SharedReferences来保存你的变量,因为当你使用类会话和公共静态时,android可以在必要时清理内存members@BheshGurung它们稍后会被设置为onOk,所以应用程序类也有相同的GC相关问题。谢谢,我有一些数据,但很复杂。单身对我来说是最好的选择。
    
    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;
    }