管理应用生命周期

【译】为避免撕逼,提前声明:本文纯属翻译,仅仅是为了学习,加上水平有限,见谅!

理解应用委托如何管理应用高层次的行为。

概述

UIKit应用总是处于图1显示的五个状态其中之一。应用从未运行(Not Running)状态开始。当用户启动应用时,应用在进入激活(Active)状态之前会进入短暂的闲置(Inactive)状态。(激活中的应用会在屏幕上出现并且被称为前台程序。)退出激活的应用会将其移出屏幕并进入后台(Background)状态,应用会在这里一直保持到一段时间后系统将其挂起。系统会不可察的自行将挂起的应用结束掉,并把它设置为未运行(Not Running)状态。

图1 UIKit应用的执行状态

应用的当前状态限定了什么系统资源对其是可用的。由于处于激活(Active)状态的应用在屏幕上显示且必须想用用户交互,所以当涉及到系统资源的使用时它们有优先权。处于后台(Background)状态的应用不在屏幕上显示,因此在访问系统资源时就有诸多限制此外在后台的运行时间也有限制。

管理事件生命周期

当你的应用从一种状态变为另一种的时候,UIKit会通知应用的委托对象——一个遵守UIApplicationDelegate协议的对象。使用应用委托去改变应用行为以匹配应用的新状态。例如当从未运行(Not Running)状态进入到闲置(Inactive)状态时,必须处理启动时间任务为应用的运行做好准备。

系统会通知应用委托如下变化:

  • 启动(Launch)。应用会从未运行(Not Running)状态变为闲置(Inactive)状态或者后台(Background)状态。使用这个变化为应用运行做准备;请看Responding to the Launch Of Your App
  • 激活(Activation)。应用从闲置状态变为激活状态。准备让应用在前台运行并在屏幕上显示;请看Preparing Your App to Run in the Foreground
  • 失活(Deactivation)。应用从激活状态进去闲置状态。让应用闲置下来,也许仅仅是暂时的;请看Preparing Your App to Run in the Background
  • 后台执行(Background execution)。应用从闲置状态或者未运行状态进入后台状态。当在幕后运行的时候,准备并只处理必要的任务。请看Preparing Your App to Run in the Backgound
  • 终止(Termination)。应用从运行状态进入未运行状态。(当挂起的应用终止时不会进行通知。)取消所有任务并准备退出;请看applicationWillTerminate

管理行为事件

应用委托也会响应一些其他的重要事件:

  • 内存告警(Memory warnings)。降低应用内存实用量;请看响应内存告警
  • 时间变化(Time changes)。更新应用的时效特性。
  • 受保护的数据可用/不可用(Protected data becomes available/unavailable)。在用户锁屏或者不锁屏的时候管理文件。
  • 状态复位(State restoration)。恢复应用应用上一个状态下的UI,给人的感觉就像你的应用从没有暂停过;请看Preserving Your App's UI Across Launches
  • 切换任务(Handoff tasks)。在另一个设备上继续任务。
  • Open URLs。接收并打开发送到应用中URLs。
  • 应用间通讯(Inter-app communication)。从配对的watchOS应用获取数据
  • 文件下载(File download)。接收应用使用NSURLSession对象下载的文件。

尽管应用委托是你处理时间生命周期的主要地方,但它不是仅有的地方。对于大多数时间,UIKit还可以生成任何对象都可以监听到的通知。你可以监听到的应用相关的通知列表,请看UIApplication。关于用来处理事件的方法的更多信息,请看UIApplicationDelegate。

话题

事件生命周期

响应应用启动

初始化应用并准备运行。

准备应用在前台运行

配置应用在屏幕上显示

准备应用在后台运行

准备把应用挂起

行为事件

响应内存告警

当系统要求这样做时释放内存。

通过启动过程保存应用UI

当应用被系统结束后将其返回到之前的状态。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0. 引子 iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提...
    i爱吃土豆的猫阅读 3,520评论 0 0
  • 管理你的应用程序的生命周期 了解应用程序代理如何管理你的应用程序的高级行为。(Understand how the...
    Jaesoon阅读 2,490评论 0 0
  • 目标 我可以很轻松的在2018年3月份支付银行2万多元钱。 计划 1.每天给婆婆,妈妈发2.88元的微信红包。 2...
    殷琴阅读 1,137评论 0 2
  • 好几年前一直非常赞同“人生识字糊涂始”这句话,一直一直都很认同,但是今天和艾玛聊天的过程里我对自己的了解又多了一些...
    Menjangan阅读 942评论 0 0