Metro App生命周期之概述

jopen 12年前

Metro App和传统的Desktop App虽然可以共存于Windows8中,但Metro App本身却是为Touch设备而生的。所以不管是其UE风格还是技术架构其实都跟传统的App存在很大差异。本文会概要性的介绍一下Metro App的生命周期有哪些状态,当然后续还会跟进其他一些文章来详细讨论生命周期中的各种状态以及相关程序中的一些细节。

先看一张图:
Metro App生命周期之概述
其实在《【windows8开发】javascript开发Metro风格App》 一文中曾经介绍过Metro App的生命周期,只是当时说明的内容比较简单。

从图中可以看出,Metro程序主要存在三个状态:Not Running,Running,Suspended。


1. 程序启动

用户启动后,程序并不是直接进入Running状态,而是先进入NotRunning状态,在此状态下如果程序发生crash或被suspended,则程序会被终止,不会保留在内存中。如果初始化正常,则程序会进入Running状态。


2. 程序挂起

由于Metro App都运行于全屏模式,当用户从当前程序切换到其他程序时,当前程序会被suspended,停止运行,仅保留于内存中。也就是说Metro模式下前台 仅会有一个应用处于Running状态。这其实是考虑到节约系统资源,提高性能和用户体验以及节省设备能源(电量)。另外,当系统进入低电量状态时,程序 也有可能被挂起(suspended)。


3. 恢复程序

当用户又切换回程序或者从低电量状态恢复回来时,相关程序会被Resume,重新进入 Running状态。但是当程序被挂起时,系统也有可能因为需要释放内存或者节约电量而强行终止某些被挂起的程序。而且并不会在终止程序时通过事件通知程 序。所以,一个稳定而又健全的程序应该在被suspended时持久化保存当前状态和必要的数据,以便在被迫终止后重启时还可以恢复之前的状态。


4. 关闭程序

Metro程序一般不需要由用户来关闭,可以完全交给系统来管理。当然用户也可以通过 特定的手势(貌似我用鼠标试了下,关不掉,郁闷)或者按Alt+F4来关闭程序。需要注意的是,不应该由应用程序中的某些代码来终止程序,这样系统会当做 是一次程序的Crash。同理,你也不可以在应用的UI中提供给用户关闭程序的按钮,此类程序应该不能通过App Store的审查。


5. 安装与卸载

开发者不再需要为Metro App开发安装或者卸载程序,仅需要把当前应用打包后上传至App Store。而用户可以直接从App Store下载到应用程序包,系统会根据根据相关信息安装应用程序。Metro模式下程序的安装或卸载都是对每位登录用户而言的,也就是说当你安装时仅仅 是为自己这个登录的ID安装,其他用户并不能共享用这个应用,卸载时也是一样,只有所有安装了同一应用的用户都卸载了该应用,该应用才会从这台设备上真正 完全删除。


本文只是概要性的介绍一些原理,程序生命周期内各个状态中的一些技术细节和程序实现会在这个系列的其他文章中继续说明,感兴趣的继续关注吧,别忘了顶一下。

转自:http://blog.csdn.net/my_business/article/details/7904065