小谈iOS应用各种状态及转换

       iOS应用开发过程中常常会遇到在应用的不同状态下对数据进行相关处理的问题。为了更好解决这些问题,我们有必要认真梳理下iOS应用的几种状态以及各状态间的转换。

       iOS应用主要有未运行状态(Not Running State)、激活状态(Active State)、未激活状态(Inactive State)、后台状态(Background State)和挂起状态(Suspended State)。如下图所示:


小谈iOS应用各种状态及转换_第1张图片


       当应用还没启动运行时,它不会执行任何代码,也不占用内存。仿如一件展品被静静地存放在库房里,尚未占据展厅的任何一角。此状态我们称之为未运行状态(Not Running State)。

       当我们点击应用图标,启动应用后,它的代码会被调到内存中运行,从而进入激活状态(Active State)。此状态下界面完全显示在屏幕中,能够接收事件并进行处理。就像展品被摆放在了展厅里并对公众开放。

       处在激活状态下的应用可能会被某个系统事件(诸如收到短信、推送、接到来电或者闹钟到点等)打断,临时进入未激活状态(Inactive State)。这时,应用的部分界面会被相应的系统提示界面遮挡,其余部分可见。此状态下应用可以继续执行代码,但不能接收事件。就好似展品正在展出时,突然接到上面要求,在展品周围设置隔离带,公众只可远瞻,不能近视之。通常情况下,应用不会在未激活状态下呆太长时间。如果按下手机顶部的锁屏按钮,当前处于激活状态的应用也会转换并长期处在未激活状态,直到解屏。

       当用户按下Home键或者通过某种途径进入另一个应用的时候,当前运行的应用会装换为后台状态(Background State)。确切地说是先进入未激活状态,停留极短的时间,再进入后台状态(注意上图的虚线)。应用进入后台状态后界面不再可见,无法接收事件,但仍可以执行代码。犹如展品已不再对公众开放,但仍然放在自己的展厅里。

       应用在后台停留数秒后,便会直接进入挂起状态(Suspended State)。处在挂起状态的应用界面不可见,不能接收事件,也不能执行代码,所有无需使用的资源都会被释放,进行低温处理。当用户再次启动该应用时,它会被迅速解冻出来,快速进入激活状态执行代码。当然也会在系统认为内存不足时被终止掉(从内存中被移除)。如果这个状态下被系统终止掉将不会收到任何通告。终止掉的应用图标仍可能留在多任务界面中(双击Home就能看见)。挂起状态的应用犹如在展位上被蒙了罩子的展品(现实中未必出现,仅是比喻),随时可能撤下,也随时可能被再次展出。

        根据以上的说明,我们可以总结出各状态的特性如下:

小谈iOS应用各种状态及转换_第2张图片


以上内容是本人结合开发经验并参考了部分资料而撰写的,如有不妥之处还请不吝赐教,愿大家能够互相学习,共同进步。

你可能感兴趣的:(iOS开发)