当用户导航离开 Windows Phone 应用程序时,这些应用程序可能会终止。有关应用程序生命周期的概述,请参阅 Windows Phone 执行模型概述。
本主题重点介绍一些处理执行模型事件的最佳做法。
-
确保当用户从“开始”或已安装应用程序列表中启动应用程序时,他们可以获得一致的启动体验。对于用户而言,很显然他们正在体验新应用程序实例。
当用户启动应用程序的新实例时,可以向用户展示一些有关上一实例的信息(例如,最近打开文档的列表),但用户不应有继续上一个会话的感觉。
-
确保当用户激活应用程序并返回到先前运行的应用程序时,他们的体验应与取消应用程序时的体验一致。用户不应明显感觉到应用程序已被终止并重新启动。
-
有些 Windows Phone 功能为用户提供了一种机制,他们可以通过这种机制以一种将上下文信息传递到已启动应用程序的方式启动应用程序。例如,ShellToast、Reminder 和 ShellTile 都公开了NavigationUri 参数,在该参数中可以传递查询字符串,并且 MediaHistoryItem 类中包含可传递上下文信息的 PlayerContext 属性。当使用这些机制之一来启动应用程序时,应用程序应显示上下文的相应内容。
-
使用 PhoneApplicationService 类的 State 属性在 Deactivated 事件处理程序中存储瞬态应用程序状态,在 Activated 处理程序中检索应用程序状态。
-
使用 PhoneApplicationPage 类的 State 属性在 OnNavigatedFrom 事件处理程序中存储瞬态页面状态,在 OnNavigatedTo 事件处理程序中检索页面状态。
-
在逻辑删除应用程序后,用户将无法返回到应用程序。因此,应在 Deactivated 事件处理程序和 Closing 事件处理程序中,将持久状态保存到独立存储。为了避免代码重复,可能需要创建一个将持久数据保存到独立存储的方法,并从这两个事件处理程序中调用该方法。
-
应用程序必须在 10 秒内完成所有应用程序事件处理程序(如 Activated 和 Deactivated)和页面导航方法(如 OnNavigatedTo 和 OnNavigatedFrom)。如果应用程序完成这些事件中任一事件的时间超过 10 秒,则应用程序将被终止。
-
如果应用程序依赖于独立存储中的数据,则不应在 Launching 事件处理程序或 Activated 事件处理程序中加载该数据。磁盘操作可能需要几秒钟的时间,而且这些事件在应用程序加载并处于活动状态之前调用,因此在加载应用程序时在这些处理程序中访问独立存储将导致长时间的等待。相反,应在加载应用程序后从独立存储异步加载数据。
可能需要在 Deactivated 和 Closing 事件处理程序中将数据写入到独立存储,但由于这些事件处理程序的完成时间最多为 10 秒,因此我们建议在运行应用程序时以增量方式保存,以便最小化必须在这些事件期间保存的数据量。
-
应用程序可以保留在休眠状态,然后在未被逻辑删除的情况下返回到运行状态。请确保取消激活应用程序未销毁其内存中状态。
-
调用“启动器”或“选择器”将始终取消激活您的应用程序,并且可能会导致您的应用程序被逻辑删除。若要确保在重新激活您的应用程序后,它可以接收“选择器”任务的结果,必须在PhoneApplicationPage 类中以全局范围来声明“选择器”对象,并且必须在 PhoneApplicationPage 构造函数中初始化“选择器”和指派 Completed 事件委托。有关如何处理您应用程序的激活和取消激活的更多信息,请参阅 Windows Phone 执行模型。
-
Windows Phone SDK 包含的默认 Windows Phone 应用程序项目模板中剔除了 PhoneApplicationService 事件的处理程序。可以在 App.xaml.cs 文件中找到它们。
-
PhoneApplicationService 类的实例由默认的 Windows Phone 应用程序项目模板提供。从您的应用程序中使用以下代码访问此类的 State 字典。
private void Application_Deactivated(object sender, DeactivatedEventArgs e) { PhoneApplicationService.Current.State["key"] = "value"; }
-
State 字典中存储的任何数据都必须可序列化,无论是直接序列化还是使用数据协定序列化。有关更多信息,请参阅使用数据协定。
各个手机功能的执行模型注意事项
功能 | 说明 |
---|---|
推送通知 | 每当启动应用程序时,无论应用程序之前是否被逻辑删除,应用程序都应假定通知通道不再有效且需要重新创建。有关创建通知通道的信息,请参阅How to: Receive Push Notifications in an Application for Windows Phone。 |