App Model 應(yīng)用程序模型
HoloLens使用Universal Windows Platform (UWP)提供的應(yīng)用模型。UWP應(yīng)用模型定義了應(yīng)用如何被安全和完全地安裝、更新、版本控制和移除。它管理了應(yīng)用生命周期 – 應(yīng)用如何被執(zhí)行、休眠和中斷 – 以及如何保留應(yīng)用狀態(tài)。它也覆蓋了和操作系統(tǒng)、文件以及其他應(yīng)用的集成和交互。
用程序模型.jpg)
- 應(yīng)用生命周期
全息應(yīng)用的生命周期涉及到了標(biāo)準(zhǔn)應(yīng)用的概念,例如放置。啟動(dòng)、中斷和移除。
放置就是啟動(dòng)
每一個(gè)應(yīng)用都通過(guò)放置應(yīng)用磁貼在HoloLens shell中啟動(dòng)。這些應(yīng)用磁鐵,在放置的時(shí)候,就將開(kāi)始運(yùn)行應(yīng)用。這些應(yīng)用磁貼會(huì)持久化的停留在它們被放置的位置,任何時(shí)候你都可以從它們返回應(yīng)用。
.jpg)
一旦完成放置(除非放置是由應(yīng)用間啟動(dòng)喚起的),應(yīng)用開(kāi)始啟動(dòng)。HoloLens應(yīng)用同一時(shí)刻可以運(yùn)行一個(gè)應(yīng)用。一旦你放置和啟動(dòng)了一個(gè)應(yīng)用,任何其他激活的應(yīng)用都會(huì)被掛起,在你放置它的地方,應(yīng)用磁貼上會(huì)留下一個(gè)它最后狀態(tài)的截圖。閱讀標(biāo)準(zhǔn)生命周期的文章來(lái)了解更多關(guān)于處理恢復(fù)和其他生命周期事件的方法。
用開(kāi)始啟動(dòng).jpg)
移除是關(guān)閉/終止處理
當(dāng)你從世界中移除一個(gè)放置好的應(yīng)用磁貼,這閉合了基礎(chǔ)的流程。這對(duì)于確保你的應(yīng)用被終止或者重啟一個(gè)有問(wèn)題的應(yīng)用可能是有用的。
應(yīng)用暫停/終止
使用HoloLens,用戶(hù)能夠?yàn)橐粋€(gè)應(yīng)用創(chuàng)建多個(gè)啟動(dòng)入口。它們通過(guò)從開(kāi)始菜單啟動(dòng)你的應(yīng)用,并將應(yīng)用磁貼放置在世界中來(lái)做到這點(diǎn)。每一個(gè)應(yīng)用磁貼都表現(xiàn)為不同的啟動(dòng)入口,在系統(tǒng)中都具有一個(gè)單獨(dú)的磁貼實(shí)例。SecondaryTile.FindAllAsync() 查詢(xún)的隊(duì)列將可以列出所有應(yīng)用的二級(jí)磁貼。
當(dāng)一個(gè)UWP應(yīng)用暫停時(shí),應(yīng)用當(dāng)前狀態(tài)的屏幕截圖被獲取。
用暫停.jpg)
與其他Windows 10平臺(tái)的關(guān)鍵區(qū)別是通過(guò)CoreApplication.Resuming和CoreApplication.Activated事件,應(yīng)用如何被通知它的一個(gè)實(shí)例被激活。
例被激活.jpg)
擴(kuò)展的執(zhí)行
有時(shí)你的應(yīng)用需要繼續(xù)在后臺(tái)做一些工作或者播放聲音。Background tasks 在Windows Holographic里是可以使用的,但是有一些限制。
展的執(zhí)行.jpg)
- 應(yīng)用視圖
當(dāng)你的應(yīng)用激活時(shí),你可以選擇顯示哪種類(lèi)型的視圖。對(duì)一個(gè)應(yīng)用CoreApplication來(lái)說(shuō),總存在一個(gè)初始的應(yīng)用視圖(app view)和任意數(shù)量的其他你想創(chuàng)建的次級(jí)視圖。對(duì)于桌面環(huán)境,你可以認(rèn)為一個(gè)應(yīng)用視圖就是一個(gè)窗口。我們的全息應(yīng)用項(xiàng)目模板將會(huì)創(chuàng)建一個(gè)初始視圖是全息視圖的Unity項(xiàng)目。你的應(yīng)用可以使用像Xaml這樣的技術(shù)來(lái)創(chuàng)建額外的2D視圖來(lái)使用應(yīng)用內(nèi)購(gòu)買(mǎi)之類(lèi)的shell控件。如果你的應(yīng)用以通用應(yīng)用形式啟動(dòng),那么初始視圖會(huì)是2D的,但是你可以通過(guò)添加一個(gè)額外的全息視圖來(lái)提升在HoloLens的體驗(yàn)。想象一下,我們用XAML構(gòu)建了一個(gè)圖片查看器,里面有個(gè)視圖切換按鈕,可以一鍵切換到全息視圖,在全息視圖中,來(lái)自應(yīng)用的照片飛到世界和物體表面上。
用視圖.jpg)
創(chuàng)建一個(gè)全息視圖
全息視圖是指那些通過(guò)HolographicSpace 類(lèi)型創(chuàng)建了全息視圖的應(yīng)用。
建一個(gè)全息視圖.jpg)
混合世界中的2D視圖
任何非全息視圖的在你的世界中都會(huì)被渲染成2D視圖.

次級(jí)視圖磁貼的放置
使用二級(jí)磁貼(Secondary Tile) API你可以放置任意數(shù)量你想要的2D視圖。這些被放置的磁貼將會(huì)以閃屏的形式出現(xiàn),用以來(lái)之后啟動(dòng)你的應(yīng)用。Windows Holographic當(dāng)前不支持渲染任何2D磁貼作為動(dòng)態(tài)磁貼。在二級(jí)磁貼API(Secondary tile APIs)頁(yè)面你可以了解到更多信息。
視圖磁貼的放置.jpg)
切換視圖
從2D視圖切換到全息視圖 Switching from the 2D XAML view to the holographic view
如果用戶(hù)使用了XAML,然后XAML IFrameworkViewSource將會(huì)控制應(yīng)用的首個(gè)視圖。應(yīng)用需要在激活CoreWindow之前切換到全息視圖,以保證應(yīng)用直接進(jìn)入全息體驗(yàn)。
使用CoreApplication::CreateNewView 和 ApplicationViewSwitcher::SwitchAsync 來(lái)實(shí)現(xiàn)視圖的切換。
注意:
- 當(dāng)從XAML視圖切換到全息視圖或?qū)⒈粡氖澜缰幸瞥膽?yīng)用面板時(shí),不要為SwitchAsync方法指定Consolidate標(biāo)記
- SwitchAsync方法應(yīng)該被你想要切換去的視圖關(guān)聯(lián)的Dispatcher所調(diào)用
- 如果你需要啟動(dòng)一個(gè)虛擬鍵盤(pán)或想要激活其他應(yīng)用,你需要使用SwitchAsync方法回到XAML視圖
從全息視圖切換回鍵盤(pán)XAML視圖
在視圖間反復(fù)切換通常是為了在全息應(yīng)用顯示一個(gè)鍵盤(pán)。如果你的應(yīng)用顯示了一個(gè)2D視圖,shell只能夠顯示系統(tǒng)鍵盤(pán)。如果你的應(yīng)用需要獲取文本輸入源,然后他們會(huì)寫(xiě)一個(gè)帶有文本輸入框的自定義XAML視圖,它能在切換到它后,輸入完成后再切換回去。
上述所說(shuō)情形,可以使用ApplicationViewSwitcher::SwitchAsync 從你的全息視圖切換回XAML視圖。
- 應(yīng)用大小
2D應(yīng)用視圖總是出現(xiàn)在一個(gè)固定的可視面板中。這使得所有2D視圖顯示同等數(shù)量的內(nèi)容。下面是關(guān)于2D應(yīng)用視圖大小的進(jìn)一步細(xì)節(jié):
- 調(diào)整大小時(shí),應(yīng)用的寬高比始終一樣
- 調(diào)整大小時(shí),應(yīng)用的分辨率和拉伸率都不會(huì)改變
- 應(yīng)用不能查詢(xún)他們?cè)谑澜缰袑?shí)際的大小
用大小.jpg)
- 應(yīng)用磁貼
開(kāi)始菜單使用了標(biāo)準(zhǔn)小號(hào)和中號(hào)磁貼用于pin視圖和所有應(yīng)用視圖。
用磁貼.jpg)
- 應(yīng)用間交互
當(dāng)你構(gòu)建應(yīng)用時(shí),Windows 10上你可以獲得豐富的應(yīng)用間通信機(jī)制。即使HoloLens目前不支持最新的應(yīng)用協(xié)議啟動(dòng)(app service protocol launches),但是許多新的協(xié)議API和文件注冊(cè)機(jī)制在HoloLens上能夠確保應(yīng)用間啟動(dòng)和通信。
協(xié)議
HoloLens通過(guò)Windows.System.Launcher APIs 支持應(yīng)用間啟動(dòng)。
當(dāng)啟動(dòng)其他應(yīng)用時(shí),以下內(nèi)容要被考慮:
- 當(dāng)非模態(tài)啟動(dòng)時(shí),例如LaunchUriAsync,用戶(hù)在與應(yīng)用交互前必須放置好它
- 當(dāng)模態(tài)啟動(dòng)時(shí),例如LaunchUriForResultsAsync,模態(tài)應(yīng)用會(huì)被放置在窗口頂部
- HoloLens不能在獨(dú)占視圖(這里應(yīng)該是指全息視圖?)頂部覆蓋上其他應(yīng)用。為了顯示啟動(dòng)的應(yīng)用,HoloLens會(huì)使用會(huì)回到世界中以顯示此應(yīng)用。
文件選取器
HoloLens支持FileOpenPicker 和 FileSavePicker 合約。盡管沒(méi)有支持文件選取合約的應(yīng)用被預(yù)裝,但是你可以從Windows Store下載它們 – 例如OneDrive。
如果你安裝了多個(gè)文件選取應(yīng)用,你將不會(huì)看到任何有歧義的UI,這些UI通常是用來(lái)選取啟動(dòng)哪個(gè)應(yīng)用。取而代之的是,首個(gè)安裝的文件選取器將會(huì)被選中。保存文件時(shí),會(huì)自動(dòng)生成包括時(shí)間戳的文件名。用戶(hù)不能改變文件愛(ài)你們。
默認(rèn)情況下,以下是本地支持的文件拓展格式:

應(yīng)用合約和Windows Holographic擴(kuò)展
應(yīng)用合約和拓展入口允許你注冊(cè)你的應(yīng)用來(lái)使用更底層的操作系統(tǒng)特性,例如處理文件拓展或者使用后臺(tái)任務(wù)。下面是Windows Holographic支持的合約和拓展入口列表。這與它支持的API集合不同。


- 應(yīng)用文件存儲(chǔ)
所有的存儲(chǔ)都是通過(guò)Windows.Storage命名空間實(shí)現(xiàn)。閱讀下面的內(nèi)容來(lái)了解更多細(xì)節(jié)。HoloLens不支持應(yīng)用存儲(chǔ)同步/漫游。
- 文件、文件夾和庫(kù) Files, folders, and libraries
- 商店和檢索設(shè)置以及其他應(yīng)用數(shù)據(jù) Store and retrieve settings and other app data
已知目錄
查看KnownFolders?來(lái)了解更多UWP應(yīng)用使用KnownFolders的細(xì)節(jié)。
節(jié).jpg)
- 應(yīng)用打包
使用Windows10,你不再需要以操作系統(tǒng)為目標(biāo)但是取而代之的是,你需要以一個(gè)或多個(gè)設(shè)備家族來(lái)作為目標(biāo)(target your app to one or more device families)。一個(gè)設(shè)備家族定義了此家族中所有設(shè)備都可應(yīng)用的API、系統(tǒng)字符集和行為集合。它也決定了你的應(yīng)用從應(yīng)用商店中能安裝到哪系列的設(shè)備。