在查看此 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有一个非常好的开始保存和检索它们的例子。
关于java - 当我 30 分钟后再次打开它时,我的 Android 应用程序中的持久数据丢失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460770/