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. docker官方镜像库 搭建 jekins

    先去docker hub 镜像官网下载jenkins 镜像(https://hub.docker.com/_/jenkins/): 其实就是在docker 中执行命令:docker pull jenk ...

  2. HBase-建表(普通建表及预分区建表)

    package com.hbase.HBaseAdmin; import java.io.IOException; import org.apache.hadoop.conf.Configuratio ...

  3. localstorage存储对象

    之前在客户端存储数据一直用的是cookie,由于有大小等限制,随着html5时代的到来,现在大多数用的是localstorage存储数据: 例如: localStorage.setItem(" ...

  4. 终端命令对字符串进行sha1、md5、base64、urlencode/urldecode

    sha1.md5.base64 mac $ echo -n foo|shasum 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 - $ 2c26b46b68ffc6 ...

  5. linux 部署nginx----端口转发

    一.解压安装 tar zxvf nginx-.tar.gz cd nginx- ./configure --with-http_stub_status_module --with-http_ssl_m ...

  6. Django 基础 模板系统

    Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {% %} 'b', 'c', 'd']的话,就显示4. filesizeformat 将值格式化为一个 “人类可读的” 文件尺寸 ( ...

  7. 31 python下实现并发编程

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  8. 原生MapReduce开发样例

    一.需求 data: 将相同名字合并为一个,并计算出平均数 tom 小明 jerry 2哈 tom tom 小明 二.编码 1.导入jar包 2.编码 2.1Map编写 package com.wzy ...

  9. php 与 Smarty 中的 isset

    今天在做一个分页模块的时候,在获取前端返回的当前页时,烦了一个大错!本来应该是这样子滴: 而咱却写成了这个样子: 在php里输出测试都没错,结果到Smarty里就被拒了! 测试结果是 这货跟谁都相等, ...

  10. mac下安装libpng环境

    用go写一个爬虫工具时需要使用一个go的库,而这个库有需要使用libpng库,不然编译就会提示说 png.h找不到等之类的信息,于是想到应该和windows一样需要安装gcc环境,然后让gcc里安装l ...