这是重新开博的第一篇,站点起名叫“温故”,希望能够自己在温故的过程中给读者你带来一些帮助。为期一个月左右的为Nokia进行Windows Phone 7的技术培训差不多要结束了,作为Trainer我想是时候总结一下我对Windows Phone 7整个生态系统的了解。
相信大家有所听闻关于Nokia基本上放弃自己的独立研发新的智能机操作系统Symbian和Meego,就在两天前6月22日,关于Nokia全球将有2800名员工转到Accenture的协议已经敲定,这次培训主要是为Nokia员工提供一个关于Windows Phone整体初步的了解,中国区诺基亚的研发主要在北京(亦庄和中关村),培训人数大约涉及200人左右。关于这次转型,诺基亚内部的员工表示非常遗憾,刚刚在欧洲发布的N9(采用Meego操作系统)让很多人更加表示惋惜。
微软的Windows Phone 7的整体生态环境还是搭建的很不错的,以下是我总结的和Windows Phone和其他现在主流手机平台的核心能力对比。
多任务 | 硬件标准 | 用户体验 | 耗电 | 操作系统功能 | 应用 | |
Windows Mobile | 支持多任务 | 只有推荐 | 差到中等 | 一般到厉害 | 一般 | 少 |
Windows Phone (7.0/7.1) | 号称“支持”多任务,其实前端应用程序Layer是单任务 | 微软定义了严格的标准,所有OEM厂商需遵循 | 好 | 厉害 | 目前还有很多系统易用性的功能还没有开发,所以一般 | 少 |
Android | 支持多任务 | 只有推荐 | 中等到好 | 厉害 | 强 | 多 |
iOS | 单任务 | 不需要标准,只有Apple自己生产 | 好 | 厉害 | 一般,苹果开发的东西也是有限的 | 多 |
Symbian | 支持多任务 | 只有推荐,可以适应很低的硬件配置 | 差到好 | 省电 | 强 | 中等 |
Windows Phone 7的系统内核还是Windows CE,它是基于Windows CE 6.0 R3版本,所以从这个层面来讲操作系统内核基本没有变化,主要是将Shell和Application Layer的东西有较大变化,Application Layer是采用了.Net Framework托管的环境CLR,有两种编程Framework,Silverlight和XNA。以下是系统软件架构图:
更细致来看Windows Phone分成四个Layer,以下为Rich总结的四个层面:
参照上图的功能层次我们可以看一下每个层面进行开发采用的环境和工具。
环境 | 开发语言 | 开发工具 | 部署工具 | |
应用程序层 | CLR | C#/VB | Visual Studio 2010 for Windows Phone | Visual Studio 2010 for Windows Phone |
OS层 | Native Code | C/C++ | Visual Studio C++ 2008 sp1 or other tools | Platform Builder for Windows Phone |
Kernel层(主要是BSP) | Native Code | C/C++ | Visual Studio C++ 2008 sp1 or other tools | Platform Builder for Windows Phone |
相信博客园的高手们最感兴趣的还是应用程序开发,即Silverlight和XNA的开发。其实在这个两天的培训中,主要涉及的也是将Windows Phone 7作为一个黑盒子展开的,即上面软件架构图中浅蓝色内的灰色部分,应用程序开发,我们从这些方面展开介绍Windows Phone 7。
详细的开发过程,我想大家可以通过微软的教程进行阅读,而且基本上就是和桌面应用开发一样,所以如果你曾经开发过Silverlight/WPF或XNA的话,那基本上不需要花费什么功夫就可以开发WP7应用。在这里我想讲几点或许对你有用的地方。
WP7中主要的LOB应用都是Silverlight应用,对于没有接触过XAML的开发人员来说,深刻理解它需要一个过程,因为这个和WinForm的界面表达方式不一样。在Silverlight中,我觉得Logical Tree和Visual Tree是非常重要的一个环节,简单理解XAML就是, 通过Xml的方式来构造对象,再具体一点就是
更多关于Tree的信息,请阅读MSDN。
WP7的每个Silverlight应用程序由多个Page构成,后退键可能在你的程序内部的不同页面跳转,也可能在不同程序间跳转。在理解WP7的Page Navigation的时候,可以通过Stack的方式来理解。
通过这样的规则可以比较方便的理解和分析在任何时候用户点击后退键将发生什么情况。还有一个事实需要说明一下,在WP7中,同一个应用程序在系统中只能有一个实例,意味着你如果开着应用程序,通过开始键再打开一个,系统会把你原来那个实例杀掉。
Data Binding是微软实现将两个对象的属性之间建立桥接关系的一种便捷方式,Target和Source有三种绑定方式,OneTime,OneWay和TwoWay,一般来说你开发的应用程序通过MVVM的模式来进行设计,将数据和界面分离,然后通过Data Binding的方式自动关联界面的空间和你Model的数据。所以一般Target是你的UIElement,Source是你的ViewModel,当然你也可以将UIElement作为Source绑定到另外一个UIElement进行联动,更多信息请参考MSDN。
4. Execution Model
关于应用程序执行过程,新的7.1Mango版本差别比较大是引入和Dormant(休眠)状态,即当你的应用层被中断(例如来电话,或者用户点击开始键、搜索键等)时,你的程序线程将被终止,但内存还将保存,这点比7.0中直接进入Tombstone(墓碑,即内存也释放)好很多。
4. XNA
XNA和Silverlight这两种应用程序变成模型是不一样的。
Silverlight | XNA | |
Model | Event-based | Loop-based |
UI | Metro UI, common controls | No UI standard |
Presentation | Vector-based | Bitmap-based |
Tools | VS and Blend WYSIWYG UI tools | no drag and drop UI tools, need code to render |
XNA game framework简单理解就是一个死循环,默认每秒钟调用你的Update和Draw方法30次。
5. Sensors
微软对于WP7硬件Sensor的API还是非常简单易用的,例如重力(加速度)感应器、陀螺仪等,同时在7.1版本中还引入了Spatial Framework(Motion)来简化开发者的工作,这些API还是需要一点点三维空间矢量及分解的知识的。
以上对Windows Phone 7的部分关键点进行了分析,期待7.1中文版ROM的发布,这样对于那些正在吃螃蟹的粉丝们有个交代。