在查看此活动时,我将点击手机上的主屏幕按钮,将我带到手机的主屏幕。当我在30分钟后重新打开应用程序时,下面的字符串不会打印出我在屏幕上30分钟之前看到的播放器回合,而是打印出“ Player 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");

}


我确定它与活动的生命周期有关,但是我不确定在那30分钟内它正在经历什么阶段,或者如何确保它显示正确的数据。

有人可以告诉我这是怎么回事吗?我已经尝试过使用saveInstanceState阅读与该问题相关的文档以及其他一些实验性解决方案,但是我没有运气。

最佳答案

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

SharedPreferences Docs有一个很好的例子,说明如何开始保存和检索它们。

Full SharedPreferences Docs

Other Storage Options

08-18 04:13
查看更多