UWA = Universal Windows Apps。第一次听到是在微软Build 2014大会。然后给出了下面一张图。
Windows Runtime,或WinRT,是Windows 8中的一种跨平台应用程序架构。
从这里可能看不到和先前的区别,下面看看对比与先前Windows Desktop App架构。
左边就是新式的WInRT 应用程序架构,左边是先前的应用程序架构(.Net Framework平台 + Windows DNA平台,就是这个样子啦,从这里可以看看微软的应用程序构架变迁历史)。
Windows 8的开发平台总体上分为两部分:一是全新的WinRT,界面搭配Metro style,二是传统的Win32、.NET(SL)、IE三大平台,界面为传统窗体风格。其中全新的WinRT被微软视为开发者的未来。
WinRT平台开发又细分为两大方式:一是C/C++搭配XAML,或C#/VB搭配XAML,二是JavaScript搭配HTML/CSS。C、C++、C#、VB、Javascript全部可以直接调用WinRT APIs,这样微软将Native(本地)、Managed(托管)、Dynamic(动态)三大语言运行机制统一了起来。可见,WinRT是微软将Win32、.NET(SL)、IE三大平台进行整合的产物。
回顾历史,Win32是微软最早推出、发展时间最久的一个开发平台。C++搭配Windows SDK或C++搭配MFC等类库或VB均是Win32平台的开发方式。而COM技术,也作为那个时代的组件模型,为微软的发展建立了不可磨灭的功勋。Win32时代,我称之为“PC时代”。那时的硬件性能普遍较低,所以Win32平台具有非常高效的性能。但是开发效率低下,内存管理复杂,COM技术晦涩难懂、没有统一的数据传递模型等这些问题,使Win32难以适应网络发展的需要。于是微软推出.NET战略,“网络时代”来临。
2000年,微软推出.NET战略,.NET平台开始走入主流。WinForm、WPF以及之后的Silverlight均是.NET时代的产物。而Assembly组件模型,也逐步地在很多领域替代COM技术。NET平台从2000年开始,到现在,已经发展了10年左右,微软依次给我们带来了.NET1.1、.NET2.0、.NET3.0、.NET3.5。.NET4.0。.NET平台解决了Win32平台的问题,设计了非常优雅的开发接口和庞大类库,开发效率提升了,内存管理引入了GC,Assembly组件模型非常简单,而且还解决了COM技术造成的DLL Hell问题,也带来了统一的数据传递模型XML。但是.NET平台从一开始,就暴露了缺点,由于.NET是建立在Win32基础上的托管API接口,性能下降,系统资源消耗严重,而且和Win32平台交互困难。随着硬件的提升、.NET平台的不断发展优化,性能得到部分提升,跨平台调用方案也一定程度解决了Win32平台的交互问题。但是这些改变,没有根本解决问题,即便微软后来又推出了“改良的.NET平台”——Silverlight,但.NET平台的缺点还是随着“移动时代”的来临,再次暴露无疑。此时WinRT上场了!
那么,WinRT给我们带来了什么呢?WinRT是“移动时代”需求的产物,那肯定会充满“移动时代”的色彩。
第一,WinRT给我们带来了界面上的革命:Metro。新的Metro风格界面更加适合触摸屏操作,更加适合多尺寸的显示屏,全屏的显示方式突出了以内容为中心的理念。
第二,WinRT给我们带来了全新的系统级Native API,WinRT APIs是Native的,而且直接建立在系统内核之上,并且还自动获得硬件加速,包装非常类似.NET,既高效又易用。
第三,WinRT采用了MVC模式,做到了界面和逻辑的很好分离。XAML和HTML5作为两大界面标记语言同时被采用。
第四,WinRT给我们带来了新的组件模型:C++组件扩展。该组件模型是COM和Assembly技术的结合体,可同时被Native、Managed和Dynamic三种类型的语言直接调用。WinRT APIs本身就是使用的C++组件扩展技术实现的,所以做到了C、C++、C#、VB、Javascript的直接调用。WPF、SL、网页应用均可以较小代码调整,即可在WinRT平台运行。
第五,WinRT同时支持X86/64、ARM架构,即可在PC上运行,又可在Pad上运行。
第六,WinRT全面采用了异步技术。在WinRT中,微软一直遵循一个简单的规则:如果一个API预计耗时超过50毫秒,那么API就是异步的,这样就能确保Metro UI上的操作体验是最好的。第六,WinRT程序在不显示的时候,自动转换为挂起状态,不占用CPU,节省了电能消耗。
对于传统平台开发,也稍微做下介绍。IE平台更新到了IE10版本,.NET平台更新到了.NET4.5版本。另外,专门提下,传统的网页插件技术已经不能在Metro风格的IE中获得支持。而新的插件技术或者是否还提供插件技术尚不得而知。
开发工具对应的是Visual Studio 11 和 Expression Blend 5。
WinRT是一个新的API 集合,具有以下特性:
- 它实现了Metro UI规范的UI库
- 为Windows开发人员提供一个简单的UI编程模型,你不需要学习Win32API的那些复杂的API了
- 它使用XAML-base的UI系统
- API都设计成了异步的
- 它和.NET一样是个沙箱的API,自成体系,用于创建AppStore上的应用程序。
- API的元数据格式是ECMA335,和.NET一样的标准。这是不是意味着以后Mono也可以在xUnit上去实现这样的API呢?
WinRT包装的新的用户界面系统,和Win32API一样是Com的上层。
Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验。WinRT会受到.NET、C++、以及JavaScript三者的影响。WinRT不会取代CLR或Win32,而是为那些使用不同语言编写的应用程序提供统一支持,以便它们可使用新的Metro风格用户界面运行于Windows之上。
WinRT不是为了取代.NET或Win32提供的所有功能,但是它是一个公共平台,以便那些使用不同语言编写的应用程序可使用新的Metro风格界面来运行。当混合C#应用程序基于WinRT创建Metro风格用户界面时,程序中将仍能执行LINQ查询,对于存储、网络、新式应用程序的安全性等方面同样能执行LINQ查询。完整的运行时架构如下图所示:
来源:http://kb.cnblogs.com/page/136288/
http://kb.cnblogs.com/page/136281/
http://www.cnblogs.com/shanyou/archive/2011/09/17/WinRT.html