java - 当我 30 分钟后再次打开它时,我的 Android 应用程序中的持久数据丢失了

标签 java android

在查看此 Activity 时,我将按手机上的主页按钮进入手机的主屏幕。当我 30 多分钟后重新打开应用程序时,下面的字符串不会打印出我提前 30 多分钟在屏幕上看到的玩家的回合,而是打印出“玩家 0 的回合”,这对于我的应用程序来说不是有效的玩家编号。这让我相信当我重新打开应用程序时,它没有从我存储数据的 GlobalClass 获取 who_turn 数据。

private int whose_turn;
private TextView tv1;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_game_screen);

    tv1 =(TextView)findViewById(R.id.game_msg);      

    whose_turn = GlobalClass.whoseturn;

    tv1.setText("Player " + Integer.toString(whose_turn) + "'s Turn");

}

我确信这与 Activity 的生命周期有关,但我不确定在这 30 多分钟内它经历了哪些阶段,或者如何确保它显示正确的数据。

谁能告诉我这是怎么回事?我尝试阅读与此问题相关的文档以及其他一些使用 savingInstanceState 的实验性解决方案,但我没有运气。

最佳答案

我猜测 GlobalClass 是一个 static 类。当类加载器被销毁时,这将丢失。如果您希望它真正持久,那么最好的地方就是 SharedPreferences。您可以在这里存储简单的数据并随时检索。您无法保证静态类变量在您需要时可用。

SharedPreferences Docs有一个非常好的开始保存和检索它们的例子。

Full SharedPreferences Docs

Other Storage Options

关于java - 当我 30 分钟后再次打开它时,我的 Android 应用程序中的持久数据丢失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460770/

相关文章:

java - "org.apache.openjpa.persistence.PersistenceException: null"错误

java - getColor 方法上的资源未找到异常

java - 并发修改异常

android - 服务中的关键倾听者

android - Espresso onView 不等待元素

java.io.FileNotFoundException :/mnt/sdcard/file (Permission denied)

java - PrintWriter 对象不会将文本文档中的所有行打印到输出文件中

java - 如何判断一个数字是否属于一个序列(决定误差幅度)?

java - 输入特定数字后停止的 while 循环

android - 如何无限运行Android MotionLayout/MotionSense 中定义的动画?