Windows Mobile 6 中为开发人员提供的新功能(2)
2007-05-30 19:09

其他控件

本部分所提到的控件只是一小部分。除了此处提及的控件之外,.NET Compact Framework 2.0 还包括许多其他控件,其中有 StatusBar 控件、针对 Smartphone 的 DataGrid 控件和 UserControl 派生的自定义控件等等。

对设备外观造型差异的支持

Windows Mobile 设备有许多不同的外观造型,而且新的外观造型在不断出现。为确保应用程序可以在 Windows Mobile 系列设备上顺利地工作,需要对应用程序用户界面进行设计,以适应设备屏幕尺寸、形状和分辨率上的差异。为了减轻您在处理这些设备差异所涉及的琐碎事务上的工作量,.NET Compact Framework 2.0 提供了几项新功能,用于简化具有适应能力的应用程序用户界面的创建。

在这些新功能中,最值得注意的是添加了控件停靠和控件定位功能。控件停靠和控件定位有助于使您的应用程序用户界面的适应能力更强,因为通过使用停靠和定位功能,可以提供有关控件应如何响应显示区域变化的默认行为。

停靠控件时,会将控件与其父控件的边缘对齐。例如,如果将控件配置为停靠在其父控件的左边缘,该控件的位置将会靠着父控件的左边缘,并沿着父控件的左边缘填充整个区域,如图 11 所示。当设备外观造型差异导致父控件尺寸发生变化时,停靠的控件会自动调整其自身尺寸,以保持与父控件左边缘的对齐。

.

图 11. 横屏和纵屏上显示的停靠在其父控件顶部边缘的控件

定位控件表示控件的一个或多个边缘应与其父控件的相应边缘保持固定的距离。设备屏幕尺寸上的差异会使控件自动调整其尺寸和位置(必要时),以使定位边缘与父控件边缘之间始终保持指定的距离。图 12 显示了定位到父控件左、右、顶部及底部边缘的 TextBox 控件。

.

图 12. 横屏和纵屏上显示的定位到其父控件左、右、顶部及底部边缘的控件

在某些情况下,让应用程序调整其控件大小或移动其控件来适应设备屏幕区域尺寸上的差异可能不切实际。当应用程序拥有大量控件,而调整大小后对用户而言控件可能变得过小而使用户无法以适当的方式与其进行交互时,通常会出现这种情况。在这种情况下,较好的解决方案是允许用户滚动应用程序显示区域,以查看屏幕边缘之外的控件。使用 .NET Compact Framework 2.0 时,无需进行任何特殊的工作来将滚动功能整合到应用程序中。应用程序显示时,.NET Compact Framework 2.0 会自动检测是否存在任何受显示尺寸限制而无法看到的控件,并在必要时为应用程序窗体添加滚动条。.NET Compact Framework 2.0 还提供了所有滚动条处理功能;因此,应用程序不需要做任何特殊处理,用户便可通过滚动窗体来查看隐藏的控件。

设备不仅在显示尺寸上有区别,在显示分辨率上也存在差异。如果不对这些分辨率差异加以考虑,那么最初设计用于 96 每英寸点数 (dpi) 显示的应用程序在 192 dpi 的设备上会显示得非常小,并呈压扁状。为能正常显示,控件需要进行缩放以适应新的显示分辨率。使用 .NET Compact Framework 2.0 时,处理这些分辨率差异会变得简单,因为 .NET Compact Framework 2.0 会自动缩放所有控件,以将设计时分辨率和运行时分辨率之间的差异考虑在内。

键盘交互和基于键盘的导航

.NET Compact Framework 2.0 中一项非常重要的改进是,为配备小键盘或键盘的设备提供了更好的支持。在 .NET Compact Framework 2.0 中,所有控件现在都接收 KeyUp、KeyDown 和 KeyPress 事件,这使您可以在应用程序中整合自定义键盘处理功能。通过新添加的 Form.KeyPreview 属性,您还可以选择是将键盘事件发送到各个控件,还是将所有控件键盘事件发送到包含这些控件的窗体。

.NET Compact Framework 2.0 还加入了对将控件设置为制表位及设置控件 Tab 键顺序的支持。这样,使用支持键盘的设备的用户便可不必使用笔针,而是使用 Tab 键在应用程序控件之间进行移动。

数据功能得到了增强

就本质而言,LOB 应用程序的大量时间花费在管理数据和与数据进行交互上。对于创建 LOB 应用程序的开发人员来说,有效率而且易用的数据类是必不可少的。Windows Mobile 6 通过在 ROM 中加入 SQL Server Compact Edition,为 LOB 应用程序开发人员提供了他们所需的完全关系型的数据库支持。借助 ROM 中的 SQL Server Compact Edition,就可以利用本地安装的关系数据库 SQL Server Compact Edition 的功能和能力,而不必在应用程序部署中加入数据库安装组件。

无论您是使用 DataSet 类和 SQL Server Compact Edition 来处理关系数据,还是使用 XML 类来处理分层数据,.NET Compact Framework 2.0 都提供了所需的易用、有效率而且丰富功能的类,以减少编程工作量,同时提高应用程序性能。

注意:

除本部分中介绍的许多出色的新功能之外,还可以参阅以下“性能更强,资源管理效率更高”部分中对改进的数据类运行时性能的介绍。

关系数据

.NET Compact Framework 2.0 提供的一种关系数据类对应用程序的影响最大,它就是新增的 SqlCeResultSet 类。SqlCeResultSet 类提供了直接指向 SQL Server Compact Edition 数据库的游标,该游标可以进行更新和滚动。SqlCeResultSet 类不是像 DataSet 类那样在内存中复制大量数据库数据,而是直接与 SQL Server Compact Edition 数据库引擎协作,因此不需要复制数据便可提供数据更新和游标滚动功能。

与 DataSet 类相比,SqlCeResultSet 类的体系结构可以大幅度减少应用程序占用的内存量。在许多情况下,SqlCeResultSet 可以将应用程序必需的内存量减少几兆字节。除了减少内存消耗之外,SqlCeResultSet 的速度要比 DataSet 类快得多。SqlCeResultSet 的速度通常是 DataSet 类的 3 到 5 倍。

XML

.NET Compact Framework 2.0 提供了几项增强功能,用于处理基于 XML 的数据。这些更改简化了 XML API 的使用,并使 XML API 在与完整 .NET Framework 所提供的功能的一致性上得到大幅度提高。作为这些增强功能的一部分,.NET Compact Framework 2.0 添加了对 XML 查询语言 XPath 的支持;XPath 可以大幅度减少导航 XML 数据所需的编程工作量,而且与使用显式导航 API 时相比,导航 XML 数据时的效率往往更高。还添加了 XmlSchema 类及相关的类,这样便可以编程方式处理和创建 XML 架构。

其中一个呼声较高的功能(XML 序列化)现在已经提供。.NET Compact Framework 2.0 现在加入了 XmlSerializer 类及相关的类,如 XmlElement 和 XmlAttribute 类。由于添加了这些类,现在可以轻松地将应用程序对象以 XML 形式保留和还原。

新的 XmlSerializer 类替代了 .NET Compact Framework 1.0 中使用的 Web 服务 XML 序列化实现。所有 Web 服务 XML 序列化和反序列化现在都通过新的 XmlSerializer 类来执行。新的 XmlSerializer 类的速度能够稳定地保持在 .NET Compact Framework 1.0 中 Web 服务 XML 序列化实现速度的二到三倍。归功于新的 XmlSerializer 类,应用程序从 .NET Compact Framework 2.0 应用程序进行 Web 服务调用所花费的总时间现在远远少于从 .NET Compact Framework 1.0 应用程序进行相同调用所花费的时间。

性能更强,资源管理效率更高

Windows Mobile 6 在 ROM 中加入了 .NET Compact Framework 2.0,从而提高了托管应用程序的性能。.NET Compact Framework 2.0 在 .NET Compact Framework 1.0 的基础上进行了重大性能改进。性能改进几乎影响到了应用程序执行的每个方面,包括应用程序资源的恢复。

为改进性能,.NET Compact Framework 2.0 运行时进行了全面的审查和返工。付出的努力得到了回报。尽管难以确定性能增强会给任何特定应用程序产生怎样的影响,但 .NET Compact Framework 2.0 运行时许多区域的执行速度可能接近 .NET Compact Framework 1.0 中相应操作执行速度的一倍半。其他区域进行的改进更为显著,如虚拟或非虚拟方法调度,在许多情况下,其速度几乎是 .NET Compact Framework 1.0 的两倍半。

除整体运行时性能改进之外,还对改进数据类的性能给予了特别关注。.NET Compact Framework 2.0 DataSet 类加载数据的速度是 .NET Compact Framework 1.0 版本的三到四倍。XmlTextReader 类进行了类似的性能改进,现在它读取 XML 文件内容的速度几乎是 .NET Compact Framework 1.0 的三倍。

除了许多应用程序运行时性能改进之外,.NET Compact Framework 2.0 还使垃圾回收器的性能得到巨大改进。一般情况下,.NET Compact Framework 2.0 垃圾回收器恢复内存的速度是 .NET Compact Framework 1.0 的七倍。大型对象分配的管理和恢复是与其他内存分配分开进行的,尽管其速度在 .NET Compact Framework 1.0 中已经非常快了,.NET Compact Framework 2.0 垃圾回收器的速度却是它的四倍。表 3 提供了 .NET Compact Framework 2.0 性能改进的总览。

表 3. .NET Compact Framework 2.0 在 .NET Compact Framework 1.0 基础上进行的性能改进总览
任务 .NET CF 2.0 较之于 .NET CF 1.0 的性能改进

整体运行时执行

速度快一倍半(平均)

方法调度

速度快两倍半

DataSet 加载

速度快三到四倍

XmlTextReader 读取

速度快三倍

垃圾回收器内存恢复

速度快七倍

垃圾回收器大型对象恢复

速度快四倍

不但应用程序在使用 .NET Compact Framework 2.0 时比在使用 .NET Compact Framework 1.0 时的性能更高,而且在 Windows Mobile 6 设备上运行的 .NET Compact Framework 2.0 应用程序与在较早版本 Windows Mobile 设备上运行的同一 .NET Compact Framework 2.0 应用程序相比,前者的启动速度要比后者快 25%。Windows Mobile 6 设备上启动时间得到缩短是因为在设备 ROM 中安装了 .NET Compact Framework 2.0。与将 .NET Compact Framework 2.0 安装在 RAM 中的设备相比,单是将 .NET Compact Framework 2.0 安装在设备 ROM 中便可使应用程序启动速度提高 25%。

所有这些性能改进不但意味着用户对您的速度更快且响应更及时的应用程序更为满意,还加快了应用程序的开发速度,因为现在您等待的时间减少了。应用程序的启动和运行速度都更高,获得应用程序测试结果的时间也更短。

本机代码互操作性进行了重构

.NET Compact Framework 2.0 在 .NET Compact Framework 1.0 已有功能基础上增加了许多新功能。由于增加了如此多的新功能,.NET Compact Framework 2.0 应用程序仅使用托管代码所执行的工作就比在 .NET Compact Framework 1.0 应用程序中可以执行的工作多得多。即使使用这些众多的新功能,托管应用程序有时仍需要与本机代码进行交互。与 .NET Compact Framework 1.0 相比,.NET Compact Framework 2.0 提供的本机代码互操作性实现进行了显著改进,大幅度简化了通过托管应用程序代码与本机代码进行的交互并减少了混淆。

.NET Compact Framework 2.0 添加了组件对象模型 (COM) 支持,使托管应用程序可以直接调用 COM 组件。不必再像 .NET Compact Framework 1.0 所要求的那样,为使 COM 对象可访问而创建自定义本机库。

本机代码封送层进行了改进,以支持比过去多得多的数据类型。.NET Compact Framework 1.0 中的大部分数据封送限制已不存在。现在可以直接将大部分参数从托管应用程序传递到本机代码,而无需进行任何特殊的编程;这包括包含嵌入式类型(如字符串和数组)的类和结构。.NET Compact Framework 2.0 还通过 MarshalAs 属性提供了可自定义的参数封送。

对于那些需要处理要求使用窗口句柄的本机函数的开发人员来说,现在所有 .NET Compact Framework 2.0 Windows 窗体控件都提供了 Handle 属性。Handle 属性公开控件基础窗口的本机窗口句柄,可以将该属性传递给要求使用窗口句柄的本机方法。

SQL Server 2005 Compact Edition

所有 Windows Mobile 6 设备都将 SQL Server Compact Edition(一种企业质量关系数据库)安装在 ROM 中;对于 Pocket PC 和 Smartphone 设备都是如此。借助 ROM 中的 SQL Server Compact Edition,应用程序就可以充分利用本地的完全关系型数据库 (SQL Server Compact Edition),而不必在应用程序部署中加入数据库安装组件。这会减少部署支持的时间和成本。

注意:

使用 SQL Server 2005 Mobile Edition 创建的现有数据库文件与 SQL Server 2005 Compact Edition 完全兼容,而且无需对数据库文件进行修改即可使用。

功能丰富

SQL Server Compact Edition 是一个功能丰富的关系数据库,提供了完整的 SQL 语法,其中包括内部联接、外部联接和子查询。SQL Server Compact Edition 提供了完整的事务一致性,这种一致性确保了数据库始终保持一致的状态,即使是在应用程序崩溃或设备完全断电时也是如此。SQL Server Compact Edition 提供记录级、页面级和数据库级的锁定功能,这确保了数据库的完整性,即使是在多个线程或应用程序同时进行访问和更新的情况下,也是如此。一项针对 LOB 应用程序的重要功能是,SQL Server Compact Edition 支持的数据库大小高达 4 GB。

有亲切感

SQL Server Compact Edition 提供了 SQL Server 2005 SQL 实现的丰富子集,使您能够充分利用现有的 SQL Server 技能。您还可以充分利用现有的数据库编程技能,因为 SQL Server Compact Edition 为托管应用程序提供了一个 ADO.NET 库,并为本机应用程序提供了一个 OLEDB 库,这两个库都与 SQL Server 2005 的对应库保持一致。

SQL Server Compact Edition 与 SQL Server Management Studio 和 Visual Studio 2005 完全集成。通过 SQL Server Management Studio,可以创建新的 SQL Server Compact Edition 数据库、查看数据库对象、创建表、修改表以及执行交互式查询。图 13 所示的 SQL Server Management Studio 中显示的是 SQL Server Compact Edition 数据库中表、表列和表索引的列表。

.

图 13. 在 SQL Server Management Studio 中查看的 SQL Server Compact Edition 数据库表、表列和表索引

Visual Studio 2005 完全支持 SQL Server Compact Edition,其提供的面向数据的功能与为其他数据库提供的相应功能是相同的。使用 Visual Studio 2005 时,可以将 SQL Server Compact Edition 数据库作为数据源添加到项目中。添加 SQL Server Compact Edition 数据源时,Visual Studio 2005 的行为与其对 SQL Server 2005 数据库的行为相同;它会生成强类型 DataSet 派生的类,并将数据库表添加到 Visual Studio 2005“数据源”窗格中。可以完全像在使用 SQL Server 2005 时那样,将表和列从“数据源”窗格拖动到应用程序窗体上,Visual Studio 2005 会自动生成相应的控件和数据绑定代码。图 14 显示了“数据源”窗格中查看到的 SQL Server Compact Edition 数据库表。

.

图 14. Visual Studio 2005“数据源”窗格中 SQL Server Compact Edition 数据库的表

通过 Visual Studio 2005 Server Explorer,可以打开 SQL Server Compact Edition 数据库,并以交互方式浏览数据库内容。还可以通过 Server Explorer 打开数据库表,以查看、添加、修改和删除记录。

内置数据同步支持

设计移动 LOB 应用程序时必须处理的其中一个最重要的问题是数据同步策略。第一次将数据从企业数据库复制到移动设备时,设备和企业数据库都拥有相同的信息;不过,不久这两个数据库拥有的信息便会不同。用户方的活动可能会导致设备上的数据发生变化;类似地,整个企业其他地方的活动可能会导致企业数据库中的数据发生变化。您需要决定应用程序如何将设备数据库与企业数据库进行同步,以使两个数据库恢复到一致的状态。

没有一种策略能够适用于所有应用程序,这也是 SQL Server Compact Edition 自身直接支持几种不同数据同步机制的原因。如果大部分数据更改是对设备(例如,收集信息的公用事业读表器)数据副本进行的,SQL Server Compact Edition 为这样的应用程序提供了远程数据访问 (RDA)。RDA 是一种非常轻型的数据同步实用程序,用于跟踪对设备数据库所做的更改,及在以后将同样的更改应用到企业数据库。在更为复杂的情况下,SQL Server Compact Edition 提供了合并复制。合并复制是一种合作式的数据同步实用程序,用于跟踪对设备数据副本和企业数据副本所做的更改。对数据进行同步时,设备数据库和企业数据库都会交换其各自的数据更改历史,以使两个数据库保持一致。作为数据同步过程的一部分,合并复制会经历一个更改协调阶段,在该阶段中,将对双方的更改进行审查,以确定要交换的具体数据。更改协调阶段会自动检测可能已发生的任何有冲突的数据更改,并采取相应的措施。合并复制对更改冲突的处理是完全可配置的,可以进行自定义。合并复制还包括一些高级数据同步功能,这些功能不能供 RDA 使用:后台数据同步(又称异步复制)及进度事件。可以通过后台数据同步功能启动合并复制进程,使其在后台线程上运行。这便使主应用程序线程可以用于保持响应及时的用户界面。进度事件提供有关数据同步进程状态(包括每个表更改的交换时间及更改协调阶段进度)的应用程序定期更新。

RDA 和合并复制都通过 Web 服务器执行数据同步过程,数据更改通过超文本传输协议 (HTTP) 或安全超文本传输协议 (HTTPS) 进行传送。通过 Web 服务器执行数据同步带来了极大的灵活性,因为这使 SQL Server Compact Edition 数据库可以在设备能够连接到 Internet 时就与企业数据库进行同步,无论是通过像 WiFi 这样的高速连接还是速度较慢的移动电话连接,都是如此。

如果数据存储在用户桌面计算机上单独的数据库中,而不是存储在企业数据库中,SQL Server Compact Edition 为这样的应用程序环境提供了 SQL Server Compact Edition Access Database Synchronizer (ADS)。通过 ADS,可以使用用户桌面 Access 数据库中的数据填充设备上的 SQL Server Compact Edition 数据库。SQL Server Compact Edition 数据库会自动跟踪对设备数据库所做的更改。以后将设备插入底座时,SQL Server Compact Edition 会使用 ADS 将设备数据库更改应用到 Access 数据库。

安全

移动设备的可移植性要求遵循安全实践,以确保不会危及重要信息的安全。为保证 SQL Server Compact Edition 数据库中数据的安全,SQL Server Compact Edition 支持使用密码来保护数据库和对数据库内容进行加密。创建数据库时,可以轻松地设置用于保护和加密数据库的密码。以下是一个 SQL 语句,它在 C 盘上创建名为 SafeData.sdf 的数据库,将密码设置为 P@ssw0rd,并将数据库配置为对所有数据都加密。

Create Database "c:\SafeData.sdf" databasepassword 'P@ssw0rd' encryption on
            

将对数据库中存储的所有数据进行加密。成功地访问数据库内容的唯一方法是在打开数据库时提供正确的密码。以下示例显示了如何在 C# 程序内以编程方式创建受密码保护的加密数据库文件。

SqlCeEngine dbEngine =
               new SqlCeEngine(@"data source=\My Documents\SafeData.sdf;password=P@ssw0rd;encrypt database=TRUE");
            dbEngine.CreateDatabase();
            

除了提供安全数据库内容之外,SQL Server Compact Edition 还在使用 RDA 或合并复制与企业数据库进行同步时提供安全数据交换。RDA 和合并复制都支持通过 Internet 与后端数据库进行交换时,使用 HTTPS 对更改历史数据进行加密。

AJAX

Windows Mobile 6 具有更新版本的 Microsoft Internet Explorer® Mobile,其中包括运行基本 AJAX 应用程序时所需的 XML DOM 和 JavaScript 支持。这使您可以利用现有 ASP.NET、XML 和 JavaScript 技能来构建在 Windows Mobile 6 设备上运行的、功能丰富的基于浏览器的应用程序。

注意:

计划于 2007 年 5 月 1 日发布的 Windows Mobile 6 SDK Refresh 包括支持基本 AJAX 应用程序的 Windows Mobile 6 仿真器映像。

简化应用程序部署

将应用程序部署到最终用户后,才能说它是成功的。部署应用程序和为该部署过程提供支持非常耗时,而且可能会对可以用于开发新功能和应用程序的时间产生显著影响。Windows Mobile 6 纳入的许多增强功能可以减少您在管理和支持应用程序部署上花费的时间和精力。这些增强功能降低了应用程序部署的总成本,通过减少您在管理和支持应用程序部署上所花费的时间,Windows Mobile 6 让您可以有更多的时间来为应用程序添加功能和创建新的应用程序。

需要安装的软件更少

Windows Mobile 6 通过在每个 Windows Mobile 6 设备的 ROM 中加入 .NET Compact Framework 2.0 SP1 和 SQL Server 2005 Compact Edition,简化了托管应用程序和自用应用程序的部署。在 ROM 中提供 .NET Compact Framework 2.0 SP1 和 SQL Server Compact Edition 大幅度简化了应用程序的部署,并降低了为成功安装应用程序而必须为最终用户提供的支持级别。

在 ROM 中提供 .NET Compact Framework 2.0 SP1 和 SQL Server Compact Edition 的益处有很多。您拥有了一个定义明确的目标平台,它确保这些核心软件组件始终存在,且始终得到正确的安装。应用程序安装软件包的整体大小仍然较小,因为它仅包含应用程序组件。较小的安装软件包的下载和安装时间都较短,这简化了应用程序分发和应用程序更新的分发。较短的安装和下载时间还为改善用户体验创造了条件。

除了用户、部署和支持体验得到改善外,在设备 ROM 中安装 .NET Compact Framework 2.0 SP1 和 SQL Server Compact Edition 还为给应用程序提供更好的运行时环境创造了条件。将 .NET Compact Framework 2.0 SP1 和 SQL Server Compact Edition 安装在设备 ROM 中,这样它们便不会占用设备 RAM 的空间。减少在 RAM 中安装的软件为应用程序留出了更多的 RAM 空间来存储数据。

对基于 URL 部署的支持

为 Windows Mobile 6 上的 Internet Explorer Mobile 添加基本 AJAX 支持提供了新的应用程序分发途径。对于适合使用基于 AJAX 的解决方案的应用场景,只需以电子邮件发送相应的 URL 便可对应用程序进行部署。用户接收到该 URL 时,只需使用 Internet Explorer Mobile 浏览到该 URL,而不需要在设备上安装其他软件,因为 Internet Explorer Mobile 已具备了运行基本 AJAX 程序所需的一切条件。

代码签署得到了简化

Windows Mobile 安全策略的一个重要方面是使用证书来签署应用程序可执行文件和安装文件。在较大的应用程序中,正确签署应用程序可执行文件和安装文件的过程可能很冗长。新的 CodeSignTool 实用程序(本文前面提到过)让您可以通过执行一个命令来签署所有必需的文件,从而显著减少了签署应用程序安装文件的工作量。