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 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

使用sysbench压力测试MySQL(一)(r11笔记第3天)

今天用了下新版本的sysbench,发现和早期版本的差别还不小,确实有不少有趣的地方,是的,我们继续测试下MySQL。 如果大家看过《高性能MyS...

3858
来自专栏程序猿DD

研究consul的service mesh功能

来源:https://jeremy-xu.oschina.io/2018/07/%E7%A0%94%E7%A9%B6consul%E7%9A%84service...

1143
来自专栏cloudskyme

开源权限系统sshpermissions

第一章 引言 1.1 编写目的 使用easyui+ssh2+shiro的权限管理系统,粒度可细化到按钮及菜单级别。目前是第一个稳定版本,可实现基本的权限控制功能...

3338
来自专栏纯洁的微笑

springboot(十九):使用Spring Boot Actuator监控应用

微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了...

3077
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 会话

     会话从字面意义上来理解,是一次对话,在我们系统中怎么理解呢,会话就是一次交互,应和程序客户端和服务器端进行一个业务交互就是一个会话,会话生存与客户与服...

1796
来自专栏ThoughtWorks

我在测试移动弱网时踩过的坑|洞见

安丛 ThoughtWorks 什么是弱网测试 在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/Edge/4G/Wifi等多种手机网络连接...

4666
来自专栏Python中文社区

Flask-SocketIO 文档译文

專 欄 ❈译者:詹聪聪 投稿 邮箱: zhancongc@gmail.com❈—— 序言: 本人工作中需要用到flask-socketio,在学习英文文档时...

8867
来自专栏闵开慧

Exception in thread "main" java.lang.OutOfMemor...

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 其实这样的错误有时...

31610
来自专栏向治洪

android守护进程

Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。而一些安全软件,如360等,会有结束...

2568
来自专栏「3306 Pai」社区

nginx+php-fpm故障排查

小明初到一家公司做运维的工作,刚来的第一天就开始部署LNMP(Linux+Nginx+MySQL+PHP)环境,结果出现了问题。 他来向我请教。

811

扫码关注云+社区