信息
您所需的主题如下所示。但此主题未包含在此库中。

开发面向低内存手机的 Windows Phone 8 应用

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

为了对应用进行最广泛的分发,应确定应用将使用的内存量,然后改编应用以使之在具有较低内存的设备上运行良好。

  • 对于 Windows Phone 8,这意味着具有 512 MB 内存的手机。

  • 对于 Windows Phone OS 7.1,这意味着具有 256 MB 内存的手机。

使用 Windows Phone SDK 8.0,您可以在 Windows Phone 模拟器 的 256-MB 或 512-MB 版本上测试您的应用。通过使用 Windows Phone SDK 7.1.1 更新 和更高版本的工具,您可以在代码中检测您的应用是否在 低内存设备 上运行,然后禁用应用的某些功能(如需要),以便使应用面向尽可能大的市场。最后,如果应用在 低内存设备 上无法正常运行,您可以在 Windows Phone 应用商店 中通过适当修改应用清单文件来取消此手机类别。

本主题介绍如何检查手机内存。本节同样描述了 Windows Phone OS 7.1 中的功能,这些功能在 低内存设备 上并不支持,或者仅得到有限支持。

本主题包括以下部分。

借助 Windows Phone SDK 8.0 或 Windows Phone SDK 7.1.1 更新,您可以检查承载应用的设备的内存工作设定限制,然后禁用一些不受支持或内存占用量大的应用功能。如需检查内存工作设定限制,请调用 GetValue(String) 方法,并通过 ApplicationWorkingSetLimit 获取 propertyName 参数。下面的代码演示如何执行此操作。

// Place call in a try block in case the user
// is not running a version of the Windows Phone OS
// that supports this method call.

try
    {
      long result =  
        (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
    }

catch (ArgumentOutOfRangeException)
    {
      // The device does not support querying for this value. This occurs
      // on Windows Phone OS 7.1 and older phones without OS updates.
    }

如果手机是 低内存设备,下表显示 GetValue(String) 方法返回的值,具体取决于 OS 版本。

OS 版本

应用工作设定限制

Windows Phone 8 默认限制

150 MB (157286400)

Windows Phone 8 更高限制

180 MB (188743680)

Windows Phone OS 7.1

90 MB (94371840)

有关 Windows Phone 8 中内存限制的更多信息,请参见 Windows Phone 8 的应用内存限制

要在这些内存限制中运行,您可能需要对您的应用作出调整。在将应用提交到 商店 之前,建议您测试应用的内存使用情况,尤其是对于那些使用大量媒体资源的应用和游戏。

警告说明警告:

一些对 GetValue(String) 的调用需要设备标识功能,ID_CAP_IDENTITY_DEVICE。然而,如果您使用 GetValue(String) 方法获取 ApplicationWorkingSetLimit 参数,您可以通过将设备标识功能从应用清单中移除来取消它。有关更多信息,请参见如何确定应用功能

可以对没有性能问题的 低内存设备 使用 Windows Phone 8 和 Windows Phone OS 7.1 提供的大部分功能。但是,泛型后台代理在 Windows Phone OS 7.1 低内存设备 上不受支持,并且有一些附加功能需谨慎使用,以便不超过应用的内存限制。

减少图形和音频内存使用

当开发在 低内存设备 上运行的应用和游戏时,应在游戏或应用中慎用图形。图形和音频内存通常不可分页。太多的音频或图像资源、纹理和动画可能会超出 低内存设备 的内存限制。对使用 XNA Framework 生成的游戏尤其需要注意,这类游戏通常使用大量的图形和音频。如果应用或游戏超出运行它们的设备的内存水平,则会发生 OutofMemoryException,并且应用将意外退出。

如果图形内存使用接近设备的工作设定限制,应尝试对应用进行性能调整,以使之能在 低内存设备 上运行。应用分析可有助于完成这项任务。如需更多信息,请参见 Windows Phone 的应用分析

减少内存使用的其他考虑事项

以下为开发在 低内存设备 上运行的应用的其他考虑事项列表。

  • 如果可以,可使用启动器和选择器。如果在应用中使用 WebBrowser 控件、地图控件或相机,应确保测试了应用使用的内存量以及应用能否在 256-MB Windows Phone 模拟器 上平稳运行。为了减少应用的内存负荷,应使用以下控件及其相应的启动器和选择器。有关在 Windows Phone 中使用启动器的更多信息,请参见 Windows Phone 启动器Windows Phone 选择器

  • 避免使用长的数据列表,如果使用,确保是分页的。按需加载数据,而不是一次性加载全部数据。

  • 避免使用具有图像的复杂项模板。如果使用了,则监视应用的内存使用。

  • 避免对页面过渡使用复杂动画。这包括 Windows Phone 工具包中的转换。如果使用过渡,请确保应用保持响应,并测试页面过渡期间应用的内存使用。

  • 注意,如果用户在运行应用时更改设备方向,则应用所用的内存可能会增加。应在方向更改时测试应用,并且如果应用通常超过 90-MB 的内存限制,应取消 低内存设备。

有关一般的性能准则,例如缩短启动时间、向用户报告进度以及其他提示,请参见 Windows Phone 8 的应用性能注意事项

适用于:Windows Phone OS 7.1

面向 Windows Phone OS 7.1 的 低内存设备 上受支持的唯一功能是泛型后台代理。Windows Phone 8 支持代理,即使手机是 低内存设备。以下是当手机为 低内存设备 时,Windows Phone OS 7.1 支持的代理:

  • 资源密集型任务

  • 定期任务

当在 低内存设备 或 256MB 模拟器上尝试使用 Add(ScheduledAction) 方法和传递 PeriodicTaskResourceIntensiveTask 以在应用中添加这些后台代理时,会发成 InvalidOperationException 异常。

如果您在应用中使用后台代理,并想要让应用在所有类型的设备上运行,则应检查设备的工作内存,并且不要在 低内存设备 上使用后台代理。例如,如果您使用 PeriodicTask 控件更新应用的实时磁贴,则应禁用 低内存设备 的实时磁贴更新,并仅提供一个静态磁贴。有关演示如何检查该值以及如何禁用应用的一些功能的示例,请参见如何禁用 Windows Phone 8 低内存手机的应用中的功能

使用 Windows Phone SDK 8.0,您可以在 256MB Windows Phone 模拟器或 512MB 模拟器上运行您的应用。在安装了 Windows Phone SDK 8.0 后,您可以从标准工具栏上的以下选项中进行选择。

Target on Standard Toolbar selecting emulator

如果您没有访问设备的权限,可以使用低内存的模拟器帮助确定您的应用或游戏在 低内存设备 上的响应速度和性能。

您还可以使用 Windows Phone SDK 中包含的工具评估应用的内存使用,并对其进行性能调整。

  • 使用 Windows 性能分析工具查看内存使用,并对应用进行性能调整。有关更多信息,请参见 Windows Phone 应用程序分析

  • 您可以使用 Windows Phone 应用商店测试工具包 评估应用使用的总内存。有关 Windows Phone 应用商店测试工具包 的更多信息,请参见 Windows Phone 商店测试工具包

如果测试了应用,并确定它不满足 低内存设备 的内存限制,则必须在应用的清单文件中指明这一点。如果不这样做,使用 低内存设备 的用户可能会下载并安装该应用。这会导致 低内存设备 用户对应用的不良评级。

若要取消对 低内存设备 开发应用,请向清单添加一部分内容以指定应用需要额外的内存。清单的这一部分在 商店 接收过程中不会被移除。

若要通过应用说明文件为 低内存设备 禁用应用,请执行以下步骤。

  1. “要求”部分添加到 WMAppManifest.xml 文件中。

    对于 Windows Phone 8 应用,紧跟 ScreenResolutions 部分之后添加 Requirement 部分。

    - 或 -

    对于 Windows Phone OS 7.1 应用,紧跟 Capabilities 部分之后添加 Requirement 部分。

  2. Requirements 部分添加 Requirement 元素。

    对于 Windows Phone 8 应用,为该 Requirement 指定 ID_REQ_MEMORY_300Name 特性值。

    - 或 -

    对于 Windows Phone OS 7.1 应用,为该 Requirement 指定 ID_REQ_MEMORY_90Name 特性值。

下面的示例演示如何执行此操作。


<Requirements>
      <Requirement Name="ID_REQ_MEMORY_300" />
</Requirements>

如果有一个 Windows Phone OS 7.1 应用,而且还希望选择退出 Windows Phone 8 低内存设备,请为 ID_REQ_MEMORY_300 设置要求。ID_REQ_MEMORY_300 要求可有效选择退出 Windows Phone OS 7.1 低内存设备 和 Windows Phone 8 低内存设备。如果指定了 ID_REQ_MEMORY_90ID_REQ_MEMORY_300,会忽略 ID_REQ_MEMORY_90 要求。

显示: