WP7应用程序在频繁激活/停用时崩溃

时间:2012-04-03 12:10:26

标签: windows-phone-7 stability

我注意到,如果在WP7应用程序中我按下开始键然后快速返回键返回应用程序,并且非常快速地重复这些步骤,应用程序最终崩溃(它意外退出并且无法恢复它通过后退键)。这发生在设备上(从未在仿真器上看到),在应用程序关闭之前需要10-15步。 我遵循Microsoft有关保存/恢复其状态的指导原则。此外,我尝试过的所有其他应用程序也崩溃了。但是,有些应用程序比其他应用程序更难以杀死。在进行压力测试的实验中,我注意到

  • XNA游戏的抵抗力往往低于纯Silverlight应用程序
  • 应用程序保存/恢复的数据越多,抵抗力就越小它是
不幸的是,我的XNA游戏在停用期间必须保存大量数据,并且很容易让它崩溃。

有谁知道这是一个已知问题还是其他什么? 如果不能完全消除这个问题,我会很感激如何让游戏更稳定。

2 个答案:

答案 0 :(得分:1)

关于问题可能存在于De / -Serialization过程中的想法,你可以这样做:

    private IsolatedStorageSettings isosettings = IsolatedStorageSettings.ApplicationSettings;
    void Application_deactivated()
    {
        isosettings.Add("serialization_finished", false);//just add once, 
                    //after that use isosettings["serialization_finished"]
        //DO: save here your code into isostorage
        isosettings["serialization_finished"] = true;
    }
    void Application_activated()
    {
        while (!isosettings["serialization_finished"])
            Thread.Sleep(500);
        //DO: read you data from isostorage
    }

因此,您实际上构建了一个on / off开关来测试序列化过程是否已完成

旧:

  

墓碑有一个时间限制,他必须完成(10   秒)。我猜你在这里给了他那么多墓碑   在某一点上,应用程序的一个实例无法完成   墓碑及时。但那只是假设的前提   保存越多=崩溃越快。

     

您可以通过测量墓碑所需的时间来测试   并将数据写入孤立存储区。当你分析   数据并看到墓碑的时间增加(最多8-9   秒)你可以得出结论应该是时间。

     

另一方面,如果所需的时间永远不会增加并保持在其中   几秒钟,你可以安全地得出结论,它不应该是一个时间问题

答案 1 :(得分:1)

我找到了一种解决方法,使应用程序更加稳定。实际上,我们不希望每次在停用期间将游戏数据保存到隔离存储。只有在游戏状态发生变化时才需要它。由于我的游戏在被激活后自动暂停,它的状态没有改变,我不必再次保存其数据,直到用户恢复游戏。因此,将数据存储到隔离存储仅用于第一次停用。这种方法有所帮助,但不是太多。 “开始”键/“后退”键的20次迭代仍会使其停止运行。