从前,当Windows系统首次创建时(20世纪80年代初),没有任何计算机会使用电池来供电。那时,所有的计算机都直接接入交流电源,这就意味着有源源不断的电能可被使用。由于电能的无限供给,Windows允许应用一直处于运行状态。即使用户与某应用不再交互,该应用也被允许使用耗费电能的资源,如CPU时间、磁盘I/O及网络I/O。
但如今,许多用户都希望使用电池供电的移动计算机系统,而且他们希望能够尽可能地延长相邻两次充电的时间间隔。为了满足用户的这种需求,仅当用户与应用交互时,Windows应用商店应用才被允许消耗系统资源(及电能);当用户从某个Windows应用商店应用切换至其他应用时,操作系统会将前者进程中的所有线程挂起,以防止该应用执行任何代码,从而阻止了前者对电能的消耗。
此外,Windows的最初版本仅为键盘和鼠标输入所设计。如今,用户迫切需要支持更直观和自然的触摸式输入的系统。当使用鼠标作为输入设备时,对于交互中产生的时延用户通常可以忍受。例如,当对某个文档翻页时,用户用鼠标拖动滚动条;释放鼠标时,该文档发生滚动。如果使用触摸式输入,文档需要在用户手指滑动的同时滚动。触摸式交互中,用户将无法容忍手指滑动与文档滚动之间的时延。当用户不再与某应用进行交互,且该应用被允许运行并消耗资源时,该应用将从用户正与之交互的其他应用中占用部分资源,从而会对性能产生负面影响,并造成后一应用对用户操作响应的延迟。这便是当用户不再与之交互时,Windows应用商店应用会将其所有线程挂起的原因。
另外,Windows还会对Windows应用商店应用施加大量的时间限制。如果应用不满足时间限制,操作系统将终止该应用,并将用户带回开始屏幕,以使用户可重新启动应用或运行能够使自己满意的其他应用。
图3.7展示了Windows应用商店应用的生命期。当某个应用被激活,Windows将立即展示该应用的启动画面(在该应用的清单文件中指定)。这使得用户可得到该应用正在进行初始化的即时反馈。当启动画面可见时,Windows将调用该应用的Main方法,并经历本章最开始描述过的所有激活步骤。初始化之后,应用所要做的最后一项内容是通过调用Windows.UI.Xaml.Windows类的Activate方法将其窗口(绘图图面)激活。如果应用未在15秒内调用该方法,操作系统将终止该应用,并返回至开始屏幕。虽然操作系统允许应用在15秒内完成其窗口的激活,但实际上应用必须在5秒内激活其窗口,以便传递Windows应用商店证书。因此,你必须对应用精心设计,以确保其可在5秒而非15秒内完成初始化,并激活其窗口。
如果应用的初始化时间超过了5秒,则可实现扩展启动画面(可参考本书配套代码中的Process Model应用)。这意味着该应用在其初始化期间激活了一个看似启动画面的窗口。但由于你激活了一个窗口,操作系统会认为应用正在运行且状态良好,因此不会将该应用终止。由于该窗口为你所控制,因此你可向用户展示一个进度环或使用其他UI功能表明该应用需要更多的时间来完成初始化。例如,Windows自带的Skype应用便是一个利用了扩展启动画面的应用。
如果应用将显示一些内容(如新文章),可先创建一个空的边框或网格,并随着数据从网络的不断流入而在其中填充内容。在这种场景下,应用并不需要扩展启动画面;用户可即时地与应用进行交互。