前言:
当一个应用程序在后台运行时,它在屏幕上是不可见的。当用户启动另一个应用程序或返回到主屏幕时,应用程序从前台切换到后台。当然,应用程序也可以在后台启动或恢复,以处理特定的事件。
失活的操作
当一个正在前台的应用程序移动到后台时,UIKit
首先调用applicationWillResignActive:
方法来禁用应用程序(使App失活)。当App失活,会做出以下几点操作: 1、将用户数据保存到磁盘并关闭任何打开的文件:
应用程序被终止时,始终保存用户数据。同样用户锁住设备时,关闭文件。
2、只做对保存用户数据至关重要的工作:
暂停调度队列和操作队列,不安排任何新的任务执行。
3、让任何正在活跃的计时器失效。(不做处理的话,倒计时退出时为35秒,几秒后回来,还是35秒,不信试试)
4、暂停游戏。
反正,失活会阻止用户与应用程序交互。
切换到后台执行
对于正在移动到后台的前台应用程序,UIKit通过调用applicationDidEnterBackground:
的方法来关闭。这个方法表明您的应用程序现在正在后台运行。当切换到后台时,您可以在应用程序挂起之前采取一些额外的步骤: 1、清理你的应用程序的用户界面。
隐藏敏感信息,排除警报和其他临时接口,并准备您的接口以获取其快照。
2、释放系统资源共享。
前台应用程序优先使用共享服务,如相机或系统数据库。当应用程序被挂起时,如果应用程序持有任何共享资源,系统就会终止它。
3、释放图像、媒体文件和临时对象。
移除所有有关大内存的对象(这些对象可以轻松地从磁盘重新创建或重新加载)。系统自动清空系统管理的缓存,包括由
NSCache
对象和采用NSDiscardableContent
协议的对象管理的数据。
在applicationDidEnterBackground:
调用时的某个时刻,UIKit
获取应用程序当前界面的快照。系统在App switcher中使用这个快照图像,当你的应用返回到前台时,它可以替代你的应用的启动屏幕。在app delegate 方法中,通过删除用户界面中的任何敏感数据来保护用户的隐私。当应用程序返回前台时,您可以决定是立即显示数据,还是先请求用户验证。
而在后台,App必须尽可能占用小一点的内存。如果应用程序管理大量数据,可能需要将数据写到磁盘并从内存中删除。例如,如果应用程序操纵图像数据,将数据保存到磁盘,以便释放数据缓冲区。消耗大量内存的后台应用程序比占用少量内存的应用程序先终止。
--文中内容总结归纳于官方文档