• Windows Phone 系列 如何保留和还原 Windows Phone 应用程序状态


    Windows Phone 执行模型一次仅允许一个应用程序在前台运行。当用户导航离开应用程序时,该应用程序通常会置于休眠状态。在休眠状态下,应用程序代码不再执行,但是该应用程序仍会保留在内存中。当用户按“返回”按键返回到休眠的应用程序时,该应用程序将恢复运行并且其状态会自动还原。但是,在用户导航离开后,应用程序可能会被逻辑删除。如果用户导航回已逻辑删除的应用程序,则该应用程序必须还原其自身的状态,因为它不再处于内存中。PhoneApplicationService 类提供了四个可帮助您保留和维护应用程序状态的事件:Launching、Activated、Deactivated 和 Closing。这些事件使您的应用程序有机会还原由多个应用程序页面使用的任何全局应用程序数据。例如,身份验证密钥或 Web 服务查询的结果就是此类型的数据。

    应用程序生命周期

    页的状态

    保存和还原页状态,您通常执行以下步骤。

    • 布尔成员变量添加到页 (名为newPageInstance ,后来在本节中的代码示例中),并将其设置为 false。此变量将用于确定是否 UI 状态需要还原。
    • 在页的构造函数中,将页面级别变量设置为 true。当第一次在一个应用程序实例中创建页,或页面将被重新创建应用程序逻辑删除后,将调用该构造函数。构造函数不会被称为如果用户只需导航到这一个应用程序中的另一页从回来因为页已在内存中。
    • 重写和实现的OnNavigatedTo方法。在此方法中,从PhoneApplicationPage.State属性中检索页级别的状态数据。
    • 重写和实现的OnNavigatedFrom方法。在此方法中,存储的PhoneApplicationPage.State属性页级别的状态数据。

    手机应用程序普遍使用从网络资源(如 Web 服务)获取的数据。应用程序内的多个页面通常使用这一来自网络的数据。该数据可视为应用程序状态的一部分。当取消激活和重新激活您的应用程序时,该数据将会丢失,除非您的应用程序已将其存储在设备上。您的应用程序只需对网络资源再进行一次查询,便可再次获取该数据,但是有两种方法可让您在取消激活应用程序时存储状态数据,并在重新激活应用程序时还原该数据。第一种方法是使用永久存储区。这包括独立存储和一个本地数据库。PhoneApplicationService 的 State 字典是一个临时存储位置,它只有在应用程序被逻辑删除时才存在,但是其访问速度要比永久存储区快得多。正确使用这两种存储类型,可大大改善用户体验和应用程序的加载时间。

    1.您的应用程序可以在此 Launching 中执行代码,但是在该事件处理程序中执行任何代码都将延迟应用程序的初始启动。鉴于此原因,您绝不应尝试在此事件处理程序中访问任何耗时资源。这包括访问独立存储、访问数据库存储,或尝试访问 Web 服务。所有应用程序事件都限定在 10 秒的时间内完成。如果您的应用程序的任何事件超出此限制,应用程序将会立即终止。

    2.在应用程序处于休眠状态或被逻辑删除时,如果用户导航回该应用程序,则会引发 Activated 事件。与 Launching 事件类似,在此事件中执行代码将会延迟应用程序恢复。请勿在此处理程序中访问独立存储、访问数据库存储,或执行同步 Web 请求.

    3.每当用户向前导航离开应用程序时,都会调用 Deactivated 事件。虽然应用程序通常会在取消激活后置于休眠状态,但是此时没有任何方法可以知道应用程序在此事件后将被逻辑删除还是终止。鉴于此原因,您应当将应用程序状态保存在 State 字典以及独立存储或数据库存储中。此示例应用程序将 ApplicationDataObject 保存到 State 和 IsolatedStorage 中。SaveDataToIsolatedStorage 方法是一种帮助器方法,在本主题的后面部分将对其进行定义。与所有应用程序事件类似,如果您的应用程序完成此处理程序所花的时间超过 10 秒,则应用程序将会终止。鉴于此原因,我们建议您在应用程序的整个生存期内以增量方式保存状态。此事件只不过是保存任何未保存数据的最后机会。请将以下代码粘贴到 App.xaml.cs 中现有 Deactivated 处理程序的上方。

    4.当用户使用“返回”按键向后导航经过应用程序的第一个页面时,会引发 Closing 事件。在此事件之后,您的应用程序将会终止。若要返回到您的应用程序,用户必须重新启动它。鉴于此原因,任何状态数据都应保存到独立存储,但是没有必要将其保存到 State 字典。再次强调,如果您的应用程序完成此事件所花的时间超过 10 秒,则应用程序将会立即终止,因此最好的方法是在应用程序的整个生存期内以增量方式保存状态。请将以下代码粘贴到 App.xaml.cs 中现有 Closing 处理程序的上方。

  • 相关阅读:
    ftp卡死问题
    Windows 10 安装FileZilla Server
    The last packet successfully received from the server was 39,900 milliseconds ago问题解决
    java.sql.SQLException: Could not retrieve transaction read-only status from server 问题解决
    三主机配置 keepalived VIP高可用
    subprocess.Popen在win10下会有异常
    python 使用内置方法读取注册表
    过年有感
    java.security.InvalidKeyException: Illegal key size 解决办法
    Android Studio 检查Top Activity
  • 原文地址:https://www.cnblogs.com/sunjunlin/p/2366518.html
Copyright © 2020-2023  润新知