1.2.2 Windows Phone 8.1應用程序模型
Windows Phone 8.1支持多種開發語言來開發應用程序,包括C#、VB、JavaScript和C++,那么本書的代碼主要是采用C#語言來開發,部分章節采用C++。從Windows Phone 8.1開始,如果是開發普通的應用程序可以選擇的應用程序模型有:C#/XAML、VB/XAML、C++/XAML和JavaScript /HTML5。游戲開發還是采用C++的DirectX的框架。在Windows Phone 8之前如果是開發普通的應用程序,只能夠采用C#/XAML和VB/XAML這兩種開發模型,而在Windows Phone 8.1之后新增了C++/XAML和JavaScript /HTML5這兩種開發模型的支持。C#/XAML、VB/XAML和C++/XAML這三種開發模型其實是類似的技術框架,它們都是使用XAML作為界面的編程語言,然后使用C#/ VB/ C++作為后台的開發語言,注意這里的C++是指C++/CX語法的C++,是屬於Visual C++ 組件擴展的擴展語法,對於C++/CX更加詳細的介紹和講解可以參考第22章。那么JavaScript /HTML5的開發模型則是使用HTML5作為界面的開發語言,JavaScript作為后台的開發語言。同時在Windows Phone 8.1里面提供了Windows運行時組件來給各種不同的編程語言來共享代碼,比如用C++實現的代碼或者封裝的功能,可以通過Windows運行時組件的方式給C#/XAML模型的應用程序來調用,或者也可以給JavaScript /HTML5模型的應用程序來調用。所在在這些不同的編程模型里面Windows運行時組件會作為一種媒介來實現跨編程語言的代碼共享。
那么對於Windows Phone 8.1所采用的多種應用程序模型,開發者應該如何去選擇應用程序的開發模型呢?微軟給出的建議了,開發者應該選擇自己所熟悉的開發語言來進行開發。如果從應用程序性能的角度去比較,采用XAML(C#、VB和C++)模型的性能會比HTML5的性能高一些。那么對於C#、VB和C++三種編程語言來說在Windows Phone 8.1上面實現的效率是差不多的,因為即使是C++也是采用C++/CX語法來調用Windows運行時的API,Windows運行時的架構則是微軟統一采用C/C++語言來封裝的。采用C#語言來調用的Windows運行時框架和采用C++調用的是一樣的。那么如果你采用標准C++所實現的算法或者圖形處理等這些公共的邏輯,肯定是C++的效率更高,不過這種情況C#、VB和JavaScript的應用程序一樣也可以通過Windows運行時組件來調用標准C++封裝的這些公共的代碼。
在Windows Phone 7、7.5和8.0的時候,Windows Phone是只支持C#/XAML和VB/XAML這兩種應用程序開發模式的,同時WPF和Silverlight這兩種技術也是只支持C#/XAML和VB/XAML的開發模式,而大部分的開發者都是選擇C#/XAML來進行開發,所以目前所C#/XAML這種開發模式所積累下來的技術知識非常豐富,也是Windows Phone開發里面最受歡迎的開發模型。
1.2.3 Windows Phone 8.1和Silverlight 8.1的區別
那么在上面所講的開發框架都是屬於Windows Phone 8.1的應用程序,這是完全基於Windows運行時框架下的應用程序開發模型,那么除此之外我們還可以創建一種應用程序叫做Windows Phone Silverlight 8.1的應用程序。那么首先了解一下為什么需要有Windows Phone Silverlight 8.1這種模式的應用程序,其實Windows Phone Silverlight 8.1這種模式的應用程序是為了兼容目前的Windows Phone 8的代碼方便升級,並且Windows Phone Silverlight 8.1的應用程序會全面支持Windows Phone 8原來的API和功能,注意Windows Phone 8.1的API對Windows Phone 8的API實現了很大的修改,下一小節我們會介紹這種差異。同時Windows Phone Silverlight 8.1的應用程序也會支持部分在Windows Phone 8.1中新增的API和功能。由此可以看出來,Windows Phone Silverlight 8.1項目只是為了暫時兼容目前的Windows Phone 8的代碼方便升級,而Windows Phone 8.1的應用開發模式則是Windows Phone未來的發展方向,並且進一步和Windows 8.1的開發模式融合起來。所以本書所有的代碼和講解都是針對Windows Phone 8.1的應用程序的,而不是Windows Phone Silverlight 8.1的應用程序。
1.2.4 Windows Phone 8.1和8.0的API 差異
Windows Phone 8的UI框架是基於Silverlight 4.0來進行開發的,應用程序的開發框架是基於.NET Framework和一個精簡版的Windows運行時框架,而Windows Phone 8.1的應用程序則是完全基於Windows運行時框架的應用程序,所使用的Windows運行時框架是和在Windows 8 / 8.1平台上開發Windows Store的應用程序是統一的框架。Windows Phone 8.1和Windows Store的應用程序都是使用的Windows運行時的UI框架,所以在應用程序里面也可以在Windows Phone 8.1和Windows Store的應用程序之間來共享XAML的UI代碼,包括模板、控件、頁面等等。下面我們再來看一下,Windows Phone 8.1和8.0的API 有哪些主要的變化和差異:
(1)8.0的XAML控件是在System.Windows.Controls空間下,而8.1的XAML控件都是在Windows.UI.Xaml命名空間下。
(2)8.0的應用程序欄為AppBarButtons,而8.1的為CommandBar。
(3)8.1增加了ListView 和GridView列表控件, 8.0的LongListSelector控件在8.1修改為SemanticZoom。
(4)8.0的Panorama控件在8.1修改為 Hub控件。
(5)8.0 的頁面基類PhoneApplicationPage類在8.1修改為Page類。
(6)8.1不再支持RadialGradientBrush畫刷。
(7)8.1的Windows.UI.Xaml.UIElement.Clip 屬性只支持RectangleGeometry類型的幾何圖形,其他的幾何圖形均不支持。
(8)8.0的彈窗控件MessageBox 在8.1里面修改為MessageDialog,並且是異步調用的模式。
(9)8.0的頁面導航方式NavigationService.Navigate(Uri source[, object navigationState])在8.1修改為this.Frame.Navigate(typeof(AboutPage));
(10)在8.1中取消了8.0的WebClient類的Http編程,增加了HttpClient類。
(11)對於XAML中命名空間的引用,有語法“clr-namespace”改為“using”。
(12)8.1取消了8.0中的啟動器和選擇器的API,可以使用Windows.System.Launcher來實現部分的功能。
(13)8.1重新修改了8.0中的語音API。
(14)8.1重新修改了8.0中的地理位置API,並增加了地理圍欄相關的功能。
(15)8.1不再支持本地數據庫SQL Server CE的使用。
(16)8.1不再支持獨立存儲的API,取而代之的只能使用應用文件和應用設置的API。
(17)8.1的后台任務編程采用新的API和機制,原來8.0的后台任務API和運行機制都取消了。
(18)8.1的推送通知編程和API也和8.0的不同。
(19)8.1的Toast通知、磁貼通知、磁貼的實現和8.0的也不同。
(20)大部分在8.0中所支持的.NET API(非Windows運行時的API)在8.1中都不再支持。

本文來源於《深入淺出Windows Phone 8.1 應用開發》
WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html
源代碼下載:http://vdisk.weibo.com/s/zt_pyrfNHb99O
歡迎關注我的微博@WP林政 微信公眾號:wp開發(號:wpkaifa)
WP8.1技術交流群:372552293
