App在后台运行的思与做

前言:

当一个应用程序在后台运行时,它在屏幕上是不可见的。当用户启动另一个应用程序或返回到主屏幕时,应用程序从前台切换到后台。当然,应用程序也可以在后台启动或恢复,以处理特定的事件。

失活的操作

当一个正在前台的应用程序移动到后台时,UIKit首先调用applicationWillResignActive:方法来禁用应用程序(使App失活)。当App失活,会做出以下几点操作: 1、将用户数据保存到磁盘并关闭任何打开的文件:

应用程序被终止时,始终保存用户数据。同样用户锁住设备时,关闭文件。

2、只做对保存用户数据至关重要的工作:

暂停调度队列和操作队列,不安排任何新的任务执行。

3、让任何正在活跃的计时器失效。(不做处理的话,倒计时退出时为35秒,几秒后回来,还是35秒,不信试试)

4、暂停游戏。

反正,失活会阻止用户与应用程序交互。

切换到后台执行

对于正在移动到后台的前台应用程序,UIKit通过调用applicationDidEnterBackground:的方法来关闭。这个方法表明您的应用程序现在正在后台运行。当切换到后台时,您可以在应用程序挂起之前采取一些额外的步骤: 1、清理你的应用程序的用户界面。

隐藏敏感信息,排除警报和其他临时接口,并准备您的接口以获取其快照。

2、释放系统资源共享。

前台应用程序优先使用共享服务,如相机或系统数据库。当应用程序被挂起时,如果应用程序持有任何共享资源,系统就会终止它。

3、释放图像、媒体文件和临时对象。

移除所有有关大内存的对象(这些对象可以轻松地从磁盘重新创建或重新加载)。系统自动清空系统管理的缓存,包括由NSCache对象和采用NSDiscardableContent协议的对象管理的数据。

applicationDidEnterBackground:调用时的某个时刻,UIKit获取应用程序当前界面的快照。系统在App switcher中使用这个快照图像,当你的应用返回到前台时,它可以替代你的应用的启动屏幕。在app delegate 方法中,通过删除用户界面中的任何敏感数据来保护用户的隐私。当应用程序返回前台时,您可以决定是立即显示数据,还是先请求用户验证。

而在后台,App必须尽可能占用小一点的内存。如果应用程序管理大量数据,可能需要将数据写到磁盘并从内存中删除。例如,如果应用程序操纵图像数据,将数据保存到磁盘,以便释放数据缓冲区。消耗大量内存的后台应用程序比占用少量内存的应用程序先终止。

--文中内容总结归纳于官方文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cmazxiaoma的架构师之路

Redis、Jmeter、MySQL的那些事

1954
来自专栏人工智能

带你构建你的的第一个Python和Django应用程序

群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 ? 您以前可能听说过Python,特别是如果您...

2215
来自专栏Laoqi's Linux运维专列

Nginx+Tomcat实现Web服务器的负载均衡

4526
来自专栏云计算教程系列

如何将PostgreSQL数据目录移动到Ubuntu 18.04上的新位置

数据库随着时间的推移而增长,有时会超出原始文件系统的空间。当它们与操作系统的其余部分位于同一分区时,这也可能导致I / O争用。

460
来自专栏FreeBuf

如何通过Emond在macOS上实现持久化访问

在这篇文章中,我们会介绍如何通过emond在macOS上实现持久化访问。根据苹果公司的说法,事件监视进程(emond)会“接受来自各种服务的事件,通过一个简单的...

1909
来自专栏北京马哥教育

出了Linux 故障找不到方法?看大牛简单、朴实的解决思路

本文由马哥教育Linux云计算面授班23期学员推荐,转载自互联网,作者为Lis,Linux资深技术专家,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛...

3406
来自专栏漏斗社区

嗤!给你来点fiyocms漏洞喷雾

0x01 背景 上周发的phpcms的漏洞分析,有些伙伴觉得比较复杂,于是便诞生本篇,通过审计一些普通的cms来一步步学习代码审计的技巧。 本篇涉及的源码...

35310
来自专栏小詹同学

GitHub 与 git 笔记 。

其实 GitHub 和 git 的教程网上特别多 ,也很齐全 。写这个笔记出发点在于共享自己的 LeetCode 刷题代码 。所以关于介绍不会特别多 ,主要记录...

1032
来自专栏芋道源码1024

点我达分布式任务调度系统-DaJob

随着互联网的发展,应用服务中的定时任务数量日益增加,常规的垂直应用架构已无法应对,分布式服务架构势在必行。同时,也迫切需要一个分布式任务调度系统来管理分...

1612
来自专栏北京马哥教育

Linux 组调度浅析

cgroup 与组调度 linux内核实现了control group功能(cgroup,since linux 2.6.24),可以支持将进程分组,然后按组来...

3044

扫码关注云+社区