Android中的“全局变量”无法持久化

3
我创建了一个继承自 Application 的类来存储我想要从多个活动中访问的变量。
public class MyApplication extends Application 
{
private String fbId, firstName;
private long expires;

@Override
public void onCreate() 
{
    super.onCreate();
}

public String getFbId() 
{
    return fbId;
}

public void setFbId(String fbId) 
{
    this.fbId = fbId;
}

public String getFirstName()
{
    return firstName;
}

public void setFirstName(String firstName) 
{
    this.firstName = firstName;
}

我能够在第一次运行应用程序时访问这些变量并设置这些变量。一旦我退出并重新启动应用程序,它将我的值设置为null。您对此有什么建议?
3个回答

4
如果您不将数据存储在存储器中(这不需要是数据库,可以是平面文件、SharedPreferences 或其他任何东西),那么它就不是持久的。
您应该使用SharedPreferences来保存这种类型的持久数据。
SharedPreferences 类提供了一个通用框架,允许您保存和检索基本数据类型的持久键值对。您可以使用 SharedPreferences 来保存任何基本数据类型:布尔值、浮点数、整数、长整数和字符串。即使您的应用程序被杀死,这些数据也将在用户会话之间保持持久。

1
这是正确的答案,按定义,RAM 中没有任何内容是持久的。 - Snicolas
1
好的,我之前一直在使用SharedPreferences,但我认为这个也会类似工作。 - James Fazio
如果您不将数据存储在存储器中(这不一定是数据库,可以是平面文件、SharedPreferences或其他任何东西),那么它就不是持久的。 - Alex Lockwood

0

在任何语言中,都没有办法持久化变量。只要程序的生命周期结束,所有变量都会被销毁,内存也会从RAM/堆内存中释放。

为了实现持久性,您有以下选项:

  1. 文件系统
    • 简单的文件格式(例如.txt)
    • 逗号分隔的文件格式(例如.csv)
  2. 数据库
    • Sqlite(在Android的情况下)
    • RMS(在Java ME、BlackBerry的情况下)
  3. 编程语言支持的持久性存储
    • SharredPreference

只有将变量的值存储到上述机制之一中,才能使您的值具有持久性


0

如果您需要在返回时使用数据,可以将其持久化。您可以使用不同的存储介质,例如SharedPreference、本地文件、sqlite等。请参考这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接