芒果快速应用切换&严重的处理崩溃

本文关键字:处理 崩溃 应用 | 更新日期: 2023-09-27 18:05:30

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

对于芒果,当应用程序在处理时被设置为休眠状态(例如:用户按下Windows按钮或锁定屏幕),当用户返回时,应用程序崩溃。

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

如果我在Visual Studio的调试模式下复制它,它不会崩溃,所以很难发现真正发生了什么。

要复制它,启动一个新的Windows Phone项目,在主页上添加一个按钮。xaml,在执行无限循环的click事件上添加事件处理程序:

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

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

编辑:我注意到的另一件事是,当运行繁重的进程时,停用的&当我离开/进入应用程序时,激活的事件似乎不会被引发。

芒果快速应用切换&严重的处理崩溃

在Windows Phone官方论坛(链接)找到答案。

为什么会崩溃:

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

为什么停用&当我离开/进入应用程序时,激活的事件不会引发:

如果进程阻塞了UI线程,这也阻塞了消息所以我怀疑这就是为什么你的应用从来没有获取检测和处理事件的机会。

你的问题很简单。当你在这么快的时间里处理繁重的工作时,WP7不能真正地把你的线程置于休眠状态,并且会保存一个损坏的状态。此状态将在重新激活时崩溃。

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

从文档:

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

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