Windows phone 8.1(WinRT)和Windows phone 10(UWP)应用程序暂停过程



我在windows商店中发布了一个windows 8.1/windows phone 8.1(WinRT)应用程序。应用程序使用Windows.UI.Xaml.Application.Suspending事件处理程序将重要的应用程序状态和统计信息保存到一组文件中(由于某种原因,不使用内置设置API)。为了成为一个"好孩子",我努力遵守Windows.ApplicationModel.SuspendingOperation.Deadline,并要求Windows.ApplicationModel.SuspendingOperation.GetDeferral()尽可能明确。

以下是问题:

  1. 我必须在截止日期之前调用Windows.ApplicationModel.SuspendingDeferral.Complete()方法,这对吗?

  2. 如果我不能在截止日期前通知它,会有什么明显的处罚吗?从系统监视的角度来看,这是否会使我的应用程序"无响应"?

  3. 调用Windows.ApplicationModel.SuspendingDeferral.Complete()时仍在运行的线程会发生什么情况?它们被冻住了吗?

  4. 在应用程序挂起过程中,"异步"线程(即隐式TPL线程或ThreadPool.RunAsync和UI线程)之间的行为是否存在差异?

  5. 在调用Windows.ApplicationModel.SuspendingDeferral.Complete()之前,我是否有义务明确取消所有异步任务,即我拥有的System.Threading.Tasks.Task实例?

这里有一篇关于RT应用程序生命周期的非常好的文章:关于WinRT中的挂起和恢复,你需要知道什么。

如果您没有在SuspendingOperation.Deadline到期之前调用Complete方法,则会发生超时,Windows会猜测您的应用程序发生了不好的情况……并且它不会被挂起,而是会被终止。

因此,您应该在Dedline之前完成工作并致电Complete。

最新更新