全球最大移动通信展Mobile World Congress 2012上,微软和OEM合作伙伴宣布支持更多的硬件配置。手机内存在主流512MB的基础上,拓展到256MB,从而使更广泛的用户群体验Windows Phone。
开发者要想更广泛的分发自己的应用程序,首先需要确定应用程序占用内存大小,并进而优化应用程序以便在256MB或更小内存的设备中正常运行。要为小内存设备开发应用程序,需要安装Windows Phone SDK 7.1.1 Update,该SDK版本包含针对256MB手机开发的一些特性。使用Windows Phone SDK 7.1.1 Update,开发者可以在代码层面检测你的应用程序是否能运行在256MB设备上,如果必要的话会禁用应用程序中的部分功能,以便应用程序能供所有手机使用。另外,使用这个版本的SDK提供了256MB版本的Windows Phone模拟器测试应用程序。最后,如果你的应用程序在256MB设备上无法正常运行,可以修改应用程序清单文件在Marketplace中声明不支持这类小内存设备本文描述Windows Phone SDK 7.1.1Update中的新特性,以及Windows Phone OS 7.1在256MB真机上不支持或有限支持的功能。
  本文包含以下部分。
安装Windows Phone SDK 7.1.1 Update
检查特定设备的应用程序内存限制
256MB设备的专有特性注意事项
支持多种设备类型的应用程序和游戏的测试和调试
使用应用程序配置清单选择不支持256MB设备类型
 
u安装Windows Phone SDK 7.1.1 Update
为了调试在256MB设备上运行的应用程序和游戏,开发者应该安装Windows Phone SDK 7.1.1 Update。安装Windows Phone SDK 7.1.1 Update的必要条件是必须先安装Windows Phone SDK 7.1。如果你需要安装Windows Phone SDK 7.1,请参阅安装Windows Phone SDK。然后从下载中心安装Windows Phone SDK 7.1.1 Update
 
u检查设备的应用程序内存限制
使用Windows Phone SDK 7.1.1 Update,开发者可以在运行你的应用程序的设备中实时检测内存工作集限制。如果你知道你的应用程序的某些功能不支持或者内存消耗较大,,就可以禁用应用程序的这部分功能。你可以调用GetValue(String)方法,传递ApplicationWorkingSetLimitpropertyName参数。以下代码演示了如何完成该操作。
 
// Place call in a try block in case the user is not running the most recent version of the Windows Phone OS and this method call is not supported.
try
{
    long result =
    (long)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
}
catch (ArgumentOutOfRangeException) {// The device has not received the OS update, which means the device is a 512-MB device.}
 
如果是一个256MB内存的设备,GetValue(String)方法返回一个小于90MB(94371840 Byte)的long型的值。如果设备的内存是256MB,那么你的应用程序使用的内存不能超过90MB。为了适应这个内存的限制,开发者需要在应用程序中避免使用某些功能,例如页面跳转的动画。如果你使用这些特定的功能,请确保在提交到Marketplace之前测试你的应用程序的内存使用情况,尤其是那些使用大量多媒体资源的应用程序和游戏。
注意:
某些对GetValue()的调用需要设备身份能力:ID_CAP_IDENTITY_DEVICE。如果你在应用程序中使用C:Microsoft.Phone.Info.DeviceExtendedProperties类,该能力会默认被添加到程序中。然而如果你使用ApplicationWorkingSetLimit参数调用GetValue()方法,你可以在应用程序整合从应用程序配置清单中删除设备身份能力,这样它就不会在后台整合到应用程序中了。更多信息,请参见如何检测应用程序的能力
u256MB设备的专有特性注意事项
你可以在256MB设备上使用Windows Phone OS 7.1提供的大多数功能而不必担心性能问题。然而,256MB的设备不支持通用后台代理,还有一些附加的功能也需要谨慎使用,以免超过应用程序的内存限制。
 
避免通用后台代理
256MB的设备上唯一不支持的功能就是通用后台代理。下列代理是不支持的:
资源密集型任务
周期性任务
当你在应用程序中使用Add(ScheduledAction)方法并传递一个PeriodicTaskResourceIntensiveTask添加到后台代理中时,无论在256MB的设备或者256MB的模拟器上,触发一个InvalidOperationException异常,这表明已经达到了设备后台代理的最大值。
如果你在应用程序中使用一个背景代理,而且希望您的应用程序能够运行在所有类型的设备上,那么你应该检查设备的工作内存,并在256MB的设备上不使用后台代理。例如,如果你使用一个PeriodicTask控件来为应用程序来更新活动磁贴,那么在256MB的设备上你应该禁用活动磁贴更新,而只提供静态磁贴。有一个例子演示了如何检查该值和如何禁用应用程序中的某些功能,请参阅如何:在256MB的设备上禁用应用程序的某些功能。
 
减少图形和音频的内存使用
在开发针对256MB内存手机上运行的应用程序和游戏的时侯,开发者应该在游戏或应用程序中谨慎使用图形。图形和音频内存往往是不分页的。过多的音频或图像资源、纹理和动画可能会超过256MB设备的内存限制。使用 XNA®Framework构建的游戏,非常典型地使用大量图形和音频,这需要特别注意。如果您的应用程序或游戏超过了运行它们的设备的内存上限,OutofMemoryException异常就会触发并且应用程序也将意外退出。
如果图形内存使用接近于设备的工作集上限,您应该试图优化应用程序的性能以便它能在256MB的设备上运行。关于在你的游戏或应用程序中减少内存使用的详细技术的更多信息,请参阅改善XNA游戏的内存使用
 
降低内存使用的其他注意事项
以下是开发一个在256MB设备上运行的应用程序的其他注意事项列表。
如果可能的话使用启动器和选择器。如果你在应用程序中使用WebBrowser控件,Windows Phone版本的Bing MapsSilverlight控件,或者照相机,请务必测试您的应用程序使用多少内存,记忆应用程序在256MB的Windows Phone模拟器上是否能流畅运行。为了减少应用程序占用的内存,您应该使用这些控件对应的启动器和选择器。关于在Windows Phone上使用启动器的更多信息,请参阅Windows Phone 的启动器Windows Phone的选择器
避免长列表的数据,如果使用它们,请确保它们是分页的。每次加载需要的数据。
避免带图像的复杂的Item模板
在页面跳转上避免复杂的动画效果。包括在Windows Phone Silverlight Toolkit中包含了的跳转效果。如果你使用跳转效果,确保你的应用程序保持响应,并测试你的应用程序在页面跳转期间的内存使用情况。
注意如果在运行一个应用程序时用户改变了手机的方向,应用程序使用的内存可能达到峰值。你也应该在方向改变的情况下测试应用程序,如果您的应用程序经常超过90MB内存的上限,那就选择不支持256MB内存的设备。
对于一般的性能指导,例如缩短启动时间,如何向用户报告进度和其他提示,请参阅Windows Phone应用程序中的性能注意事项
 
u支持多种所有内存大小的手机设备类型的应用程序和游戏的测试和调试
使用Windows Phone SDK 7.1.1Update,你可以在256MB的Windows Phone模拟器上运行你的应用程序。在安装完Windows Phone SDK7.1.1Update之后,你可以在标准工具栏上的以下选项中选择:
Windows Phone设备
Windows Phone 模拟器—512MB
Windows Phone 模拟器—256MB
如果没有设备,你可以使用256MB的模拟器来帮助确定在256MB的设备上你的应用程序或游戏的响应速度和性能。
   你也可以使用Windows Phone SDK 7.1中就包含的工具来估计内存的使用情况以及优化应用程序的性能。你可以使用Windows PhoneMarketplace Test Kit来估计应用程序使用的所有内存。关于Windows PhoneMarketplace Test Kit的更多信息,请参阅MSDN上的Windows Phone Marketplace Test Kit。使用Windows Perfomance Analysis Tool来查看内存的使用情况以及优化应用程序的性能。更多信息,请参阅Windows Phone Performance Analysis
 
u使用应用程序配置清单选择不支持256MB设备类型
如果你测试应用程序,确定它不满足256MB设备的内存要求,你必须在应用程序配置清单里标明。如果你不这样做的话,使用256MB设备的用户会下载并安装你的应用程序。即使它能在较高内存的设备上运行良好,这也可能会导致应用程序的差评。如果选择开发的应用程序不支持256MB的设备,请在配置清单上添加一部分说明你的应用程序需要90MB的内存。在市场接收的过程中,配置清单的这部分不会被去掉。若要在配置清单上添加90MB内存的需求,请按以下步骤操作:
1.     在WMAppManifest.xml文件中Capabilities之后添加Requirements 部分。
2.     Requirements 部分添加一个Requirement 元素。为Requirement元素添加一指定的Name属性,设置其值为ID_REQ_MEMORY_90
 
以下代码演示了如何完成该操作:
</Capabilities>
<Requirements>
      <Requirement Name="ID_REQ_MEMORY_90" />
</Requirements>
 
注意
Visual Studio不会根据该需求阻止你将应用程序部署到256MB的模拟器或256MB的设备上。该需求仅防止Marketplace将您的应用程序展示给使用256MB设备的用户。
 
u也可参阅
其他资源