最近看到Nokia Lumia 520 和 720 即将上市的消息在网上热议,相信这两款手机会以更亲民的价格快速进入市场,随之开发者一定会关心到的一个问题是由于硬件的差异我们在开发过程中需要注意或者做哪些更改呢?今天我跟大家聊聊在硬件功能受限的设备上开的一些注意要点。
首先说下内存
明确两个名称“低内存设备”和“高内存设备” MSDN上的解释是 1GB 以上内存的手机称之为高内存设备,也就是说1GB是这两种设备的分水岭。
通过上图可以看到在我们的一般应用中 低内存设备内存限制是 180MB,高内存设备是380MB。
当然如果你想让你的应用一些功能只运行在高内存的设备上,得到一个最佳运行效果通过代码是可以判断实现的:
private void Application_Launching(object sender, LaunchingEventArgs e) { try { // Check the working set limit and set the IsLowMemDevice flag accordingly. Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit"); if (result < 94371840L) MainPage.IsLowMemDevice = true; else MainPage.IsLowMemDevice = false; } catch (ArgumentOutOfRangeException) { // Windows Phone OS update not installed, which indicates a 512-MB device. MainPage.IsLowMemDevice = false; } }
当然这里的 94371840L 是一个阀值 也可以自己设定。
参考 :(v=vs.105).aspx
另外 我也也可以在低内存设备上申请更多内存的使用空间(如果你需要)
<App> … <Requirements> <Requirement Name="ID_REQ_FRONTCAMERA"/> </Requirements> <FunctionalCapabilities> <FunctionalCapability Name="ID_FUNCCAP_EXTEND_MEM"/> </FunctionalCapabilities> </App>
以上这段代码演示了如何使用 ID_FUNCCAP_EXTEND_MEM 在低内存设备上当应用内存使用超过180MB后不强制退出。
<App> … <Requirements> <Requirement Name="ID_REQ_FRONTCAMERA" /> <Requirement Name="ID_REQ_MEMORY_300" /> </Requirements> </App>
并且声明了ID_REQ_MEMORY_300 表示次应用不会被低内存设备搜到以及禁止被安装。
如果你想在你的应用中减少内存使用可以注意以下事项:
WebBrowser,地图,相机都会有额外的内存开销,尽可能的使用 windows phone 启动器/选择器
避免使用长的数据列表,如果使用,确保是分页的。按需加载数据,而不是一次性加载全部数据。
避免使用具有图像的复杂项模板。如果使用了,则监视应用的内存使用。
避免对页面过渡使用复杂动画。这包括 Windows Phone 工具包中的过渡。如果使用过渡,请确保应用保持响应,并测试页面过渡期间应用的内存使用。
注意,如果用户在运行应用时更改设备方向,则应用所用的内存可能会增加。应在方向更改时测试应用,并且如果应用通常超过 90-MB(180MB) 的内存限制,应取消低内存设备。
硬件要求了解应用清单文件:
要修改清单文件,您可以使用清单设计器。但是,在某些情况下您还必须手动编辑文件的 XML 内容。例如,当以下任意条件为真时,您必须手动编辑 XML:
声明应用使用了扩展关联属性。
声明应用使用了位置服务并在后台运行。
声明应用无法在内存受限的设备上运行。
清单设计器有四个页面:
应用程序 UI
功能
要求
打包
应用程序 UI 没有什么特别都样。
功能页面:这里面的是声明你的应用程序会涉及到那些API的使用,在此声明后才可以在应用中使用,否则该功能会在设备中禁用。
硬件要求和确定功能列表请参考:
硬件要求 (v=vs.105).aspx
功能列表 (v=vs.105).aspx