iOS 的应用里的几种状态:

  • active: 应用在前台正常运行
  • background: 应用在后台,并且在执行代码。
  • inactive: 这个状态是应用从一个状态向另一个状态的过渡
  • suspended: 应用在后台,但不执行代码。应用留在内存里,但随时可能被系统清除。进入这个状态系统不会通知应用。

应用根据执行的任务不同分为两类:

  1. 需要执行特殊的后台任务(播放音频、定位等)应用允许后台运行,这些应用在用户按下 Home 键后会进入 background 状态继续运行。
  2. 其它应用在按下 Home 键后短暂地进入 inactive 状态,然后紧接着就进入 background 状态。这时候系统会通知你,并且有几秒钟时间来做 clean-up。然后应用就会进入 suspended 状态。

当再次进入你的应用的时候(进入 active 状态),取决于你的应用之前的状态,如果之前是 background 状态,你将有机会重新启动在进入 background 状态时被暂停的任务,其它情况下均相当于重新启动应用。


需要做的就是在从 active 进入 background 状态时保存数据,记录下应用状态信息,并且释放尽可能多的空间;在从 background 进入 active 的时候接着执行之前的任务。有两种方式:

    1. 实现回调函数
      应用在状态之间转换的时候,会自动调用几个相关的方法,你可以在这些方法里做数据保存之类的事情,这些方法包括:applicationWillResignActive:(这个方法在应用即将进入 background 状态时被调用)、applicationDidEnterBackground:(这个方法在应用进入 background 状态后被调用,这个状态下应用会随时进入 suspended 状态)、applicationWillEnterForeground:(这个方法在从 background 进入 active 状态时被调用)。
      applicationDidEnterBackground: 这个方法是你需要的方法,需要注意的是系统只提供大约 5 秒的时间让你完成工作,超时的话这个方法会被系统强制返回,如果需要更多的处理时间,可以调用beginBackgroundTaskWithExpirationHandler: 这个方法来申请更多的运行时间,它会在后台线程执行,这个方法也只有有限的时间处理清理工作。详细用法看文档吧。

    2. 监听通知
      应用在状态之间转换的时候,会发送通知。

iOS按home键后程序的状态变化的更多相关文章

  1. 【phonegap】IOS按HOME键,程序进入suspended状态,再调出,界面出现文字丢失问题

    发现丢失的都是时间类型的,把日期型改成 yyyy年mm月dd日 时间从冒号表示(12:00)改成中文表示,12点00分,就不再丢失了. 未找到真正原因

  2. iphone按home键后,正在运行的程序是否退出了呢?

    是否一直有个疑问,当iphone手机正在运行一个APP,如果按Home键后,那么原来正在运行的程序还在运行吗?如果开发过ios程序,可能不是问题,如果没有开发过的,可能会疑惑了,我就简单的说一下.以几 ...

  3. Android使用Home键后应用程序重启的问题

    正常情况应该是在点击 home 按键后,程序在后台暂停运行,点击 后退键 才会退出应用的,但是今天遇到个问题,点击 home 键后,重新再打开应用却每次都返回应用启动页面,有些莫名其妙,一番googl ...

  4. iOS 打开本地 其他应用程序(URL Types)

    iOS 打开本地其他应用程序(URL Types) /*前言废话:Xcode是神奇的,是我所见到的编译器中最为神奇的,如:它可以同时运行两个甚至更多Project到我们模拟器上,可以同时使用一个模拟器 ...

  5. Xamarin iOS编写第一个应用程序创建工程

    Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后,就可以在Xamarin Studio中编写程序了.本节将主要讲解在Xamarin Studio中如何进行工程的 ...

  6. IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)

    IOS开发中如何判断程序第一次启动 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序是否第一次启动,如果是,则显示新手操作 ...

  7. Android按下home键后重新打开app进入主activity的问题

    问题阐述: 当我们写一款App的时候,势必会有这种情况:用户已经进行了多级的操作,现返回栈中已存在多个activity,那么这个时候我们想回到最初的activity难道要一层层的返回吗,对用户来说 无 ...

  8. Android应用Home键后Launcher重复启动问题

    通过系统方式(系统安装器)安装应用,点击"打开"按钮,进入应用主界面,按home键后,点击应用图标进入,应用会出现重新启动.当完全退出应用后,再通过启动图标进入应用,便不会出现重复 ...

  9. 排错-升级Exchange 2013 CU22后程序名称显示异常

    近期在按需更新Exchange 2013 CU22补丁以便解决Microsoft Exchange Server ADV190007 Guidance for "PrivExchange&q ...

随机推荐

  1. centos下安装Anaconda

    第一步:将下载好的Anaconda2-4.1.1-Linux-x86_64.sh软件传到linux下 第二步:[hadoop@spark1 ~]$ cd Desktop #进入到该软件所在目录,我的放 ...

  2. JConsole操作手册

    一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大 ...

  3. ajax设置Access-Control-Allow-Origin实现跨域访问

    ajax跨域访问 1.jsonp方法,jsonp方法是一种非官方方法,这种方法只支持GET方式, 不如POST方式安全.(即使使用jquery的jsonp方法,type设为POST, 也会自动变为GE ...

  4. IDEA运行debug为灰色无法运行

    这种情况一般在使用他人项目的时候产生. 检查几个问题,本地环境是否配置好 然后进入项目的入口右键运行是否可以正常运行 如果不可以,就在 修改一下src文件 一般就可以正常使用了

  5. Git在mac中和远程仓库建立连接

    1.下载git http://git-scm.com/download/ 2. 安装git 按照文字提示即可 3. 验证是否成功,输入命令行.输出git版本表示git安装成功. git --versi ...

  6. Unity3d 异常与解决方案集合(持续)

    1:更新完unity的5.3.1 版本 后,打开SimpleFrameworld_UGUI 后出现 error CS0117: 'System.IO.Directory' does not conta ...

  7. 论文笔记 — MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

    论文:https://github.com/ei1994/my_reference_library/tree/master/papers 本文的贡献点如下: 1. 提出了一个新的利用深度网络架构基于p ...

  8. JAVA实现多线程的四种方式

    JAVA多线程实现方式: 1.继承Thread类(无返回值) 2.实现Runnable接口(无返回值) 3.实现Callable接口,通过FutureTask包装器来创建Threak线程(有返回值) ...

  9. HDU 1052 贪心+dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS ...

  10. hive中order by,sort by, distribute by, cluster by的用法

    1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...