WinPhone 应用程序事件对应用程序进程终止作出反应

Posted

技术标签:

【中文标题】WinPhone 应用程序事件对应用程序进程终止作出反应【英文标题】:WinPhone app event to react on app process termination 【发布时间】:2014-04-07 09:23:35 【问题描述】:

当我们停用 WP 应用程序时,它可能会被操作系统删除并在以后终止。当进程终止时,我需要将一些未保存的应用程序数据保存到持久存储中,但在此之前不需要。显然,Deactivated 事件不能用于此目的,因为它会在应用程序移至后台时立即引发; Close 事件也不是我们需要的事件,因为它不会在应用程序进程被操作系统终止时引发。是否有一个特殊的 Windows Phone 应用程序事件,例如 Application_Terminated?

【问题讨论】:

建议您的应用以增量方式保存其重要数据。另一种危险的方式是使用PhoneApplicationServiceState:MSDN 【参考方案1】:

问题在于,操作系统只会在您的应用程序处于严重的资源压力下时才会删除它。当时唤醒应用程序并运行应用程序代码是不切实际的,因为它可能会冒险当前处于前台的任何内容。所有现代移动操作系统(包括 androidios)都存在此限制。这只是在电池/资源友好型环境中运行的成本。

话虽如此,听起来您的后备存储并没有区分用户“保存”的数据和在用户完成事务之前正在缓存的数据。构建这个想法会很有用。想想现在互联网上一些更智能的网站的工作方式。您可以在输入数据的过程中导航离开,当您回来时,网站会向您显示部分填写的表格。该网站了解您尚未“完成”,但它尊重您提供了“完成”所需的一些信息这一事实。

我在这里要说的是,通过了解和适应用户可能使用应用程序的方式,问题很容易解决。将您的应用程序视为一个网站(至少在这种情况下)有助于透视事物。对冗长的答案感到抱歉。希望对你有帮助:)

【讨论】:

【参考方案2】:

没有这样的事件。您应该将您的状态保存在 Deactivated 上,以便如果应用程序从内存中删除(墓碑化),您可以在重新激活时重新设置自己。如果您的问题是确定是否需要在 Activated 上恢复状态,请查看 ActivatedEventArgs.IsApplicationInstancePreserved 标志 (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.shell.activatedeventargs.isapplicationinstancepreserved(v=vs.105).aspx)。这个标志告诉你你的应用是否被墓碑化了。如果不是,您可以丢弃旧状态或在下次停用时覆盖它。

【讨论】:

我现在就这样做,并且确实使用 IsApplicationInstancePreserved。我不希望保存用户在 Deactivate 事件中输入的当前未保存的数据,因为在这种情况下,当我们的应用被停用时,我们会失去我们需要的 OK/Cancel 功能。

以上是关于WinPhone 应用程序事件对应用程序进程终止作出反应的主要内容,如果未能解决你的问题,请参考以下文章

TerminateThread 可以终止另一个进程的线程吗?

进程控制在进程管理中的作用

进程的 创建 终止 等待 替换

进程的 创建 终止 等待 替换

Nodejs 信号

操作系统学习