我在市场上有几个游戏应用程序,它们试图通过类似这样的代码(简化)来保存用户在游戏中的进度:
public class Globals extends Application
{
public void onCreate()
{
settings = getSharedPreferences("MyPrefsFile", 0);
}
public void get_state()
{
synchronized (this)
{
game_progress = settings.getInt("progress", 1);
}
}
public void save_state()
{
synchronized (this)
{
SharedPreferences.Editor editor = settings.edit();
editor.putInt("progress",game_progress);
editor.commit();
}
}
}
这似乎在 99% 的情况下都可以正常工作,但是我时不时地收到用户报告他们的进度丢失了,但是没有人能够给我一系列操作,使我能够重复该错误.. 。 到现在。这些步骤包括按“主页”按钮退出程序,然后等待几个小时。然后当他们再次运行游戏时,他们的进度就会丢失。令人沮丧的是,这个序列不能缩短,做一个“强制停止”而不是离开手机几个小时并没有同样的效果。
据推测,如果手机闲置几个小时,应用程序中的部分或全部活动可能会以与强制停止略有不同的方式关闭......但我不知道如何。
有任何想法吗?
编辑:我应该解释如何从构成我的游戏的各种活动中调用这些函数。这是一个示例,但我也从其他几个地方调用 gs.save_state() ,只是为了更好地衡量。
public class Main_GamePlay extends Activity
{
Globals gs;
public void onCreate(Bundle savedInstanceState)
{
gs = ((Globals) getApplicationContext());
}
protected void onPause()
{
gs.save_state();
}
}