這是重新開博的第一篇,網站起名叫“溫故”,希望能夠自己在溫故的過程中給讀者你帶來一些協助。為期一個月左右的為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開放,不過你可以這個連結擷取到作業系統相關的以下資料(需要翻牆,相信很多對底層感興趣的人很有協助)
- Windows phone 7 architecture Guide
- Windows phone 7 Customization Guide
- Windows phone 7 OEM application development Guide
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遊戲,遊戲中的元素簡單理解為都是3D 模型+貼圖,Load為Model,一般你在Update方法中更新Model的X和Y和Z的座標,在Draw方法建立Camara進行投影;3D 模型一般通過3DMax或者AutoCAD等專業工具產生fbx檔案作為XNA的遊戲資源
5. Sensors
微軟對於WP7硬體Sensor的API還是非常簡單易用的,例如重力(加速度)感應器、陀螺儀等,同時在7.1版本中還引入了Spatial Framework(Motion)來簡化開發人員的工作,這些API還是需要一點點三維空間向量及分解的知識的。
以上對Windows Phone 7的部分關鍵點進行了分析,期待7.1中文版ROM的發布,這樣對於那些正在吃螃蟹的粉絲們有個交代。