HoloLens开发手记 - 应用程序模型 App model
HoloLens使用Universal Windows Platform (UWP)提供的应用模型。UWP应用模型定义了应用如何被安全和完全地安装、更新、版本控制和移除。它管理了应用生命周期 - 应用如何被执行、休眠和中断 - 以及如何保留应用状态。它也覆盖了和操作系统、文件以及其他应用的集成和交互。

应用生命周期 App lifecycle
全息应用的生命周期涉及到了标准应用的概念,例如放置。启动、中断和移除。
放置就是启动 Placement is launch
每一个应用都通过放置应用磁贴在HoloLens shell中启动。这些应用磁铁,在放置的时候,就将开始运行应用。这些应用磁贴会持久化的停留在它们被放置的位置,任何时候你都可以从它们返回应用。
一旦完成放置(除非放置是由应用间启动唤起的),应用开始启动。HoloLens应用同一时刻可以运行一个应用。一旦你放置和启动了一个应用,任何其他激活的应用都会被挂起,在你放置它的地方,应用磁贴上会留下一个它最后状态的截图。阅读标准生命周期的文章来了解更多关于处理恢复和其他生命周期事件的方法。
移除是关闭/终止处理 Remove is close/terminate process
当你从世界中移除一个放置好的应用磁贴,这闭合了基础的流程。这对于确保你的应用被终止或者重启一个有问题的应用可能是有用的。
应用暂停/终止 App suspension/termination
使用HoloLens,用户能够为一个应用创建多个启动入口。它们通过从开始菜单启动你的应用,并将应用磁贴放置在世界中来做到这点。每一个应用磁贴都表现为不同的启动入口,在系统中都具有一个单独的磁贴实例。SecondaryTile.FindAllAsync() 查询的队列将可以列出所有应用的二级磁贴。
当一个UWP应用暂停时,应用当前状态的屏幕截图被获取。
与其他Windows 10平台的关键区别是通过CoreApplication.Resuming和CoreApplication.Activated事件,应用如何被通知它的一个实例被激活。
| 情况 | 恢复 | 激活 |
| 从开始菜单启动一个应用新实例 | 使用一个新的TileId激活应用 | |
| 从开始菜单启动第二个应用实例 | 使用一个新的TileId激活应用 | |
| 选中当前未激活的应用实例 | 使用实例关联的TileId激活应用 | |
| 选中一个不同的应用,然后选中先前激活的实例 | 恢复被触发 | |
| 选中一个不同的应用,然后选中先前未激活的实例 | 恢复被触发 | 然后使用实例关联的TileId激活应用 |
扩展的执行 Extended execution
有时你的应用需要继续在后台做一些工作或者播放声音。Background tasks 在Windows Holographic里是可以使用的,但是有一些限制。
应用视图 App views
当你的应用激活时,你可以选择显示哪种类型的视图。对一个应用CoreApplication来说,总存在一个初始的应用视图(app view)和任意数量的其他你想创建的次级视图。对于桌面环境,你可以认为一个应用视图就是一个窗口。我们的全息应用项目模板将会创建一个初始视图是全息视图的Unity项目。你的应用可以使用像Xaml这样的技术来创建额外的2D视图来使用应用内购买之类的shell控件。如果你的应用以通用应用形式启动,那么初始视图会是2D的,但是你可以通过添加一个额外的全息视图来提升在HoloLens的体验。想象一下,我们用XAML构建了一个图片查看器,里面有个视图切换按钮,可以一键切换到全息视图,在全息视图中,来自应用的照片飞到世界和物体表面上。
创建一个全息视图 Create a Holographic view
全息视图是指那些通过HolographicSpace 类型创建了全息视图的应用。
混合世界中的2D视图 2D view in the Mixed World
任何非全息视图的在你的世界中都会被渲染成2D视图.
次级视图磁贴的放置 Placement of further App Tiles
使用二级磁贴(Secondary Tile) API你可以放置任意数量你想要的2D视图。这些被放置的磁贴将会以闪屏的形式出现,用以来之后启动你的应用。Windows Holographic当前不支持渲染任何2D磁贴作为动态磁贴。在二级磁贴API(Secondary tile APIs)页面你可以了解到更多信息。
切换视图 Switching views
从2D视图切换到全息视图 Switching from the 2D XAML view to the holographic view
如果用户使用了XAML,然后XAML IFrameworkViewSource将会控制应用的首个视图。应用需要在激活CoreWindow之前切换到全息视图,以保证应用直接进入全息体验。
使用CoreApplication::CreateNewView 和 ApplicationViewSwitcher::SwitchAsync 来实现视图的切换。
注意:
- 当从XAML视图切换到全息视图或将被从世界中移除的应用面板时,不要为SwitchAsync方法指定Consolidate标记
- SwitchAsync方法应该被你想要切换去的视图关联的Dispatcher所调用
- 如果你需要启动一个虚拟键盘或想要激活其他应用,你需要使用SwitchAsync方法回到XAML视图
从全息视图切换回键盘XAML视图 Switching from the holographic view back to a keyboard XAML view
在视图间反复切换通常是为了在全息应用显示一个键盘。如果你的应用显示了一个2D视图,shell只能够显示系统键盘。如果你的应用需要获取文本输入源,然后他们会写一个带有文本输入框的自定义XAML视图,它能在切换到它后,输入完成后再切换回去。
上述所说情形,可以使用ApplicationViewSwitcher::SwitchAsync 从你的全息视图切换回XAML视图。
应用大小 App size
2D应用视图总是出现在一个固定的可视面板中。这使得所有2D视图显示同等数量的内容。下面是关于2D应用视图大小的进一步细节:
- 调整大小时,应用的宽高比始终一样
- 调整大小时,应用的分辨率和拉伸率都不会改变
- 应用不能查询他们在世界中实际的大小

应用磁贴 App tiles
开始菜单使用了标准小号和中号磁贴用于pin视图和所有应用视图。

应用间交互 App to app interactions
当你构建应用时,Windows 10上你可以获得丰富的应用间通信机制。即使HoloLens目前不支持最新的应用协议启动(app service protocol launches),但是许多新的协议API和文件注册机制在HoloLens上能够确保应用间启动和通信。
协议 Protocols
HoloLens通过Windows.System.Launcher APIs 支持应用间启动。
当启动其他应用时,以下内容要被考虑:
- 当非模态启动时,例如LaunchUriAsync,用户在与应用交互前必须放置好它
- 当模态启动时,例如LaunchUriForResultsAsync,模态应用会被放置在窗口顶部
- HoloLens不能在独占视图(这里应该是指全息视图?)顶部覆盖上其他应用。为了显示启动的应用,HoloLens会使用会回到世界中以显示此应用。
文件选取器 File pickers
HoloLens支持FileOpenPicker 和 FileSavePicker 合约。尽管没有支持文件选取合约的应用被预装,但是你可以从Windows Store下载它们 - 例如OneDrive。
如果你安装了多个文件选取应用,你将不会看到任何有歧义的UI,这些UI通常是用来选取启动哪个应用。取而代之的是,首个安装的文件选取器将会被选中。保存文件时,会自动生成包括时间戳的文件名。用户不能改变文件爱你们。
默认情况下,以下是本地支持的文件拓展格式:

应用合约和Windows Holographic扩展 App contracts and Windows Hologrphic extensions
应用合约和拓展入口允许你注册你的应用来使用更底层的操作系统特性,例如处理文件拓展或者使用后台任务。下面是Windows Holographic支持的合约和拓展入口列表。这与它支持的API集合不同。
应用文件存储 App File Storage
所有的存储都是通过Windows.Storage命名空间实现。阅读下面的内容来了解更多细节。HoloLens不支持应用存储同步/漫游。
- 文件、文件夹和库 Files, folders, and libraries
- 商店和检索设置以及其他应用数据 Store and retrieve settings and other app data
已知目录 Known folders
查看KnownFolders 来了解更多UWP应用使用KnownFolders的细节。
|
Property 属性 |
Supported on HoloLens Development Edition HoloLens开发板是否支持 |
Description 描述 |
|---|---|---|
| AppCaptures | Yes |
Gets the App Captures folder. 获取应用捕获文件夹 |
| CameraRoll | Yes |
Gets the Camera Roll folder. 相机文件夹 |
| DocumentsLibrary | Yes |
Gets the Documents library. The Documents library is not intended for general use. 文档库 |
| MusicLibrary | Yes |
Gets the Music library. 音乐库 |
| Objects3D | Yes |
Gets the Objects 3D folder. 3D对象文件夹 |
| PicturesLibrary | Yes |
Gets the Pictures library. 图片库 |
| Playlists | Yes |
Gets the play lists folder. 播放列表文件夹 |
| SavedPictures | Yes |
Gets the Saved Pictures folder. 保存的图片文件夹 |
| VideosLibrary | Yes |
Gets the Videos library. 视频库 |
| HomeGroup | No |
Gets the HomeGroup folder. 家庭组文件夹 |
| MediaServerDevices | No |
Gets the folder of media server (Digital Living Network Alliance (DLNA)) devices. 媒体设备文件夹 |
| RecordedCalls | No |
Gets the recorded calls folder. 电话录音文件夹 |
| RemovableDevices | No |
Gets the removable devices folder. 可移动设备文件夹 |
应用打包 App package
使用Windows10,你不再需要以操作系统为目标但是取而代之的是,你需要以一个或多个设备家族来作为目标(target your app to one or more device families)。一个设备家族定义了此家族中所有设备都可应用的API、系统字符集和行为集合。它也决定了你的应用从应用商店中能安装到哪系列的设备。
翻译自:https://developer.microsoft.com/en-us/windows/holographic/app_model#App_views
HoloLens开发手记 - 应用程序模型 App model的更多相关文章
- HoloLens开发手记 - HoloLens真机上手简评
千呼万唤始出来,终于今天拿到了HoloLens真机. 使用体验 使用自带的应用录制了一段使用视频,如下 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表 ...
- HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator
首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...
- HoloLens开发手记-开发概述Development overview
开发HoloLens全息应用将使用UWP平台(Universal Windows Platform),所有的HoloLens应用都是Win10通用应用,所有UWP通用应用都可以在HoloLens上运行 ...
- HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens
运行在HoloLens上的应用可能包含2种视图,分别是全息视图和2D视图.应用可以在全息视图和2D视图之间转换,这常被用于访问系统提供的接口,例如虚拟键盘.拥有至少一个全息视图的应用被归类为全息应用. ...
- HoloLens开发手记 - 构建2D应用 Building 2D apps
HoloLens可以让我们在真实世界中看到全息图像内容.但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用. 目 ...
- HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
关于Vuforia,开发AR应用的人基本都会熟悉.之前我也写过一篇关于Vuforia开发的博客:Vuforia AR SDK入门 今天这篇博客则主要是谈谈HoloLens使用Vuforia开发混合现实 ...
- HoloLens开发手记-实现3D应用启动器
一直有人问我,第三方应用在HoloLens上可以实现3D启动图标吗?就像微软官方出的应用那样.在不久之前,这个问题的答案还是No. 但是随着最新的Windows build 1803版本的发布,现在我 ...
- HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal
Windows设备控制台允许你通过Wi-Fi或USB来远程控制你的HoloLens设备.设备控制台是HoloLens上的一个Web Server,你可以通过PC的浏览器来连接到它.设备控制台包含了很多 ...
- HoloLens开发手记 - 使用Visual Studio Using Visual Studio
不论你是否使用DirectX或Unity来开发全息应用,你都会使用Visual Studio 2015来进行调试和部署应用.在本部分,你将会学习以下内容: 如何通过Visual Studio将你的应用 ...
随机推荐
- JavaScript Patterns 4.10 Curry
Function Application apply() takes two parameters: the first one is an object to bind to this inside ...
- Sql Server之旅——第三站 解惑那些背了多年聚集索引的人
说到聚集索引,我想每个码农都明白,但是也有很多像我这样的猥程序员,只能用死记硬背来解决这个问题,什么表中只能建一个聚集索引, 然后又扯到了目录查找来帮助读者记忆....问题就在这里,我们不是学文科,, ...
- request对象详解
先来了解一下Request的主要方法: setAttribute(String name,Object):设置名字为name的request的参数值getAttribute(String name): ...
- windows 远程桌面研究
最近因为一个监控相关的项目,深入研究了一下 windows 的 远程桌面的相关知识. 1. 如何让关闭了远程桌面连接的用户,对应的 session 立即退出 windows server. 大家使用 ...
- windows开关机时间记录
1. 开机时间记录批处理文件,kai.bat @echo off echo %date% %time% 开机 >>D:\开关机记录\开关机时间.txt 2. 关机时间记录批处理文件,gua ...
- iOS 懒加载不起作用的原因
在.m类中定义了一共strong属性,用懒加载getter方式去处理,发现用的时候无论如何属性都是null,调试后,发现根本没进getter方法. (ps:懒加载,又称为延迟加载.说的通俗一点,就是在 ...
- proteus 查找 仿真元件 中英文对照 [持续更新]
CRYSTAL 晶振 CAP 电容 RES 电阻 LED 灯 DIODE 二极管 POWER 电源 GND 接地 SPEAKER 扬声器 AT89C51 51 CPU芯片 三极管 PNP N ...
- 一次Mutex死锁的原因探究
1.现象 最近项目中调出一个bug,某些时候程序会卡死不动,用windbg进行加载后用 ~*kb 命令列出所有的线程栈调用,发现有多个线程调用 WaitForMultipleObjects 在等 ...
- Android初涉及之Android Studio&JAVA入门--二月不能不写东西
是的,我还没有放弃写博客. 是的,我也没有放弃PHP的学习. 是的,我要开始学学最TM火的Android开发了. 你呢 1.Android Studio 一.概况 安装和配置什么的就不具体说了,网上一 ...
- PCA原理与实践
在对数据进行预处理时,我们经常会遇到数据的维数非常之大,如果不进行相应的特征处理,那么算法的资源开销会很大,这在很多场景下是我们不能接受的.而对于数据的若干维度之间往往会存在较大的相关性,如果能将数据 ...