【问题标题】:Mango fast app switching & heavy processing crashMango 快速应用切换 & 繁重的处理崩溃
【发布时间】:2011-08-18 04:38:18
【问题描述】:

我有一个 WP7 应用程序,有时需要进行长时间(5-25 秒)的处理。

在 Mango 中,当应用在处理过程中设置为休眠状态(例如:用户按下 Windows 按钮或锁定屏幕)时,当用户返回时,应用会崩溃。

我在模拟器和我的设备上试过,同样的行为。

如果我在 Visual Studio 上以调试模式重现它,它不会崩溃,因此很难找到真正发生的事情。

要重现它,请启动一个新的 Windows Phone 项目,在 MainPage.xaml 上添加一个按钮并在执行无限循环的单击事件上添加一个事件处理程序:

while (true)
{
    System.Threading.Thread.Sleep(100);
}

我的问题是:到底发生了什么?为什么会崩溃?快速应用切换不应该只是暂停应用进程并恢复它吗?

编辑: 我注意到的另一件事是,在运行繁重的进程时,当我退出/进入应用程序时,似乎没有引发 deactivated 和 activate 事件。

【问题讨论】:

    标签: c# .net windows-phone-7 windows-phone-7.1


    【解决方案1】:

    在官方 Windows Phone 论坛 (link) 上找到了答案。这里是:

    为什么会崩溃:

    从停用应用程序开始,它正好有十秒钟的时间 完成它正在做的事情。如果代码耗时超过十秒, 操作系统将终止应用程序。

    为什么在我退出/进入应用程序时未引发停用和激活事件:

    如果进程阻塞了 UI 线程,这也会阻塞消息 调度循环,所以我怀疑这就是为什么你的应用永远不会 有机会检测和处理事件。

    【讨论】:

      【解决方案2】:

      你的问题很简单。当您在这么快的时间内进行繁重的处理时,WP7 无法真正将您的线程置于休眠状态,并且会保存损坏的状态。此状态在重新激活时会崩溃。

      它可以在调试器中工作,因为调试器会使一切变慢,然后 WP7 有更多时间。

      来自文档:

      当用户向前导航离开应用程序时,在引发 Deactivated 事件后,操作系统将尝试将应用程序置于休眠状态。在这种状态下,应用程序的所有线程都停止并且不进行任何处理,但应用程序在内存中保持原样。如果应用程序从这个状态被重新激活,应用程序不需要重新创建任何状态,因为它已经被保留了。

      来源:http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx

      【讨论】:

      • 您在哪里看到在繁重的处理下 WP7 无法将线程置于休眠状态?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多