0

我在市场上有几个游戏应用程序,它们试图通过类似这样的代码(简化)来保存用户在游戏中的进度:

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();
        }
    }
4

1 回答 1

0

可能不应该有任何正确的顺序,因为在您的情况下发生的是内存回收。当您按下主页时,您的应用程序将进入后台状态,该状态具有更高的优先级由垃圾收集器回收。所以您应该尝试保存当前通过共享偏好以外的其他方式进行状态。如果可能的话,您应该在当前活动的主页上保存状态。

希望这能让您简要了解您想要什么。

于 2013-01-17T12:53:16.787 回答