这是重新开博的第一篇,站点起名叫“温故”,希望能够自己在温故的过程中给读者你带来一些帮助。为期一个月左右的为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 Phone 7的系统内核还是Windows CE,它是基于Windows CE 6.0 R3版本,所以从这个层面来讲操作系统内核基本没有变化,主要是将Shell和Application Layer的东西有较大变化,Application Layer是采用了.Net Framework托管的环境CLR,有两种编程Framework,Silverlight和XNA。以下是系统软件架构图:
更细致来看Windows Phone分成四个Layer,以下为Rich总结的四个层面:
- CoreKernel is the indivisible minimum kernel (controlling the processor, memory and critical hardware)
- Kernel includes everything else that runs in the kernel (e.g. logical kernel abstractions including threads, processes, etc., networking stack, device drivers, printer drivers, graphics & media drivers, KTM, ETW, etc.)
- CoreOS is the core (mostly user-mode) OS substrate upon which the OS itself depends (e.g. Win32, COM, OLE, RPC, WMI, DirectX, etc.)
- OS is the remaining set of other high-level essential and non-essential features that may, or may not, be installed by the OEM/user/etc. (e.g. Explorer, Silverlight, .NET, Media Center, IIS, etc.)
WP7开发
参照上图的功能层次我们可以看一下每个层面进行开发采用的环境和工具。
环境 | 开发语言 | 开发工具 | 部署工具 | |
应用程序层 | 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 |
- 开发工具下载:
- Visual Studio 2010 for Windows Phone可以通过微软网站免费下载
- Visual Studio C++ 2008 sp1是需要花钱买的
- Platform Builder for Windows Mobile的时候是可以公开下载的,但是for Windows Phone版本只面向OEM厂商开放,做ROM就是用这个工具。
- 开发资料下载:
- 应用程序开发的资料微软提供的非常丰富,推荐WP7 Jump Start Video,Training Kit 和Developer Document
- Microsoft Press eBook Programming Windows Phone 7
- OS和Driver开发,这个资源只向OEM开放,不过你可以这个链接获取到操作系统相关的以下资料(需要FQ,相信很多对底层感兴趣的人很有帮助)
- 应用程序开发的资料微软提供的非常丰富,推荐WP7 Jump Start Video,Training Kit 和Developer Document
WP7应用程序开发
相信博客园的高手们最感兴趣的还是应用程序开发,即Silverlight和XNA的开发。其实在这个两天的培训中,主要涉及的也是将Windows Phone 7作为一个黑盒子展开的,即上面软件架构图中浅蓝色内的灰色部分,应用程序开发,我们从这些方面展开介绍Windows Phone 7。
- Platform Overview (WP7的硬件标准,软件架构,生态系统)
- Metro UI (UI设计样式,Tile,Glance&Go, Panaroma)
- Build WP7 App PPT (开发工具VS + Blend)
- Page Navigation (程序内和程序间导航)
- Execution Model (程序生命周期,休眠和墓碑)
- Data Binding(MVVM,数据绑定)
- Sensor and Gesture(重力感应器,陀螺仪,指南针,GPS)
- XNA (2维和3维游戏)
- Push Notification(Tile,Toast,Raw)
- Mango New Feature (中文,SQL,后台服务【15秒每30分钟】…)
详细的开发过程,我想大家可以通过微软的教程进行阅读,而且基本上就是和桌面应用开发一样,所以如果你曾经开发过Silverlight/WPF或XNA的话,那基本上不需要花费什么功夫就可以开发WP7应用。在这里我想讲几点或许对你有用的地方。
1. Xaml Tree
WP7中主要的LOB应用都是Silverlight应用,对于没有接触过XAML的开发人员来说,深刻理解它需要一个过程,因为这个和WinForm的界面表达方式不一样。在Silverlight中,我觉得Logical Tree和Visual Tree是非常重要的一个环节,简单理解XAML就是, 通过Xml的方式来构造对象,再具体一点就是
- 每个Xaml中的XmlElement元素都可以在.Net framework中找到相应的Class,你每在Xaml中加入一个XmlElement,等价于你在C#代码中new一个这个类的一个实例,同时通过XmlAttribute来设置该对象的Property的值
- 通过XmlElement的层级结构来体现父亲儿子的控件关系,等价于你在代码中parentControl.Children.Add(childControl)
更多关于Tree的信息,请阅读MSDN。
2. Page Stack
WP7的每个Silverlight应用程序由多个Page构成,后退键可能在你的程序内部的不同页面跳转,也可能在不同程序间跳转。在理解WP7的Page Navigation的时候,可以通过Stack的方式来理解。
- 后退键:出栈。
- 开始键(包括通过开始中打开的程序)和搜索键:入栈。
- 程序切换(长按后退键):将栈中某一个应用程序在栈中左右的页面移到栈顶。
通过这样的规则可以比较方便的理解和分析在任何时候用户点击后退键将发生什么情况。还有一个事实需要说明一下,在WP7中,同一个应用程序在系统中只能有一个实例,意味着你如果开着应用程序,通过开始键再打开一个,系统会把你原来那个实例杀掉。
3. Data Binding
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(墓碑,即内存也释放)好很多。
- 任何时候只有一个前台程序在跑
- 你的程序运行在Sandbox中,所以你不能进行跨进程操作,同时7.1所谓的“多进程”,也是对于你来说并不知道后台程序它现在是否在运行,因为每30分钟只分配了15秒给你的后台程序
- 你的后台程序和前台程序是在两个进程中,它们不能通行
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次。
- 对于二维XNA游戏,游戏中的元素简单理解为都是一些小图片,Load为Sprite,一般你在Update方法中更新Sprite的X和Y的坐标,在Draw方法中绘制;
- 对于三维XNA游戏,游戏中的元素简单理解为都是三维模型+贴图,Load为Model,一般你在Update方法中更新Model的X和Y和Z的坐标,在Draw方法建立Camara进行投影;三维模型一般通过3DMax或者AutoCAD等专业工具生成fbx文件作为XNA的游戏资源
5. Sensors
微软对于WP7硬件Sensor的API还是非常简单易用的,例如重力(加速度)感应器、陀螺仪等,同时在7.1版本中还引入了Spatial Framework(Motion)来简化开发者的工作,这些API还是需要一点点三维空间矢量及分解的知识的。
以上对Windows Phone 7的部分关键点进行了分析,期待7.1中文版ROM的发布,这样对于那些正在吃螃蟹的粉丝们有个交代。