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

1.为什么按home键后,长时间不操作,再启动qq的话,会重新运行qq(没有回到原来的状态)?

答:iphone实际上是伪后台,按home键后,程序就退出了。所以我们iphone中使用的程序一般都没有退出键。

试想一下,如果程序有退出键的话,那么当程序无响应的话,退出键也就不能用了,退出的话,不也还需要按Home键,因此索性就不加退出键好了,“简洁统一”体验很好啊。

再想一下,如果按home键而程序没有退出运行的话,那么我们的手机会越来越慢了,用户会抓狂的。

因此我们双按Home键显示的“后台运行程序列表”,准确的说,应该叫做“最近使用程序列表”

2.既然按Home键后,qq程序退出了,那么为什么我短时间内再运行qq,并不会重新启动qq,而是回到退出前的状态?

答:前面说如果程序不退出而在后台运行,系统会非常卡,用户会抓狂;那么如果程序每次都需要重新启动,花费一些时间,用户也会抓狂,因此iphone采用了一个方法:当按Home键后,程序会终止运行,不会占用cpu,但是会在内存中保存记录点,记录上次程序运行的点,因此重新启动qq的话会回到退出前的状态;但是qq并没有实际运行,所需  要的内存很少,同时苹果在资源优化上也做了很多工作,因此不会对手机内存的占用量有太多影响;随着后台中保存的运行程序的记录点越来越多,或者其他程序运行时感觉内存不足的话,那么系统会自动清理掉后台程序记录点,导致问题1的出现,即再启动qq的话,会重新运行qq。

3.既然qq退出运行了,为什么我还会收到推送信息,例如qq离线消息?

答:确切的说,给我们发推送信息,例如qq离线消息的,并不是qq程序,而是ios系统,我们收到的推送信息和应用程序是否关闭没有关系;大概可以这么理解:如果我们在qq中或者手机设置中开启了推送消息,那么苹果就会在自己的服务器上记下你的手机ID,当qq需要发送推送信息时,会把信息发送给苹果公司的服务器,然后苹果公司的服务器再把信  息发送给你的手机上。

当然了,iphone手机应用程序还有另外一种通知方式,叫做“本地通知”,不需要苹果服务器给你发信息了,例如下载了个俯卧撑软件,定时提醒你,那么手机会根据本地设置,定时给你发推送信息。

总结一下:按home键后,为了手机不“卡死”,所以会让程序在后台挂起,不占用cpu;但是为了用户下次启动时会有较快的响应,因此会在内存中保存运行点,提高体验;不管程序运行不运行,都可以发送推送通知。

PS:心里明白了,但是还是有点儿不信或者还想深入理解怎么办?答:买个苹果电脑,编个app测试一下,就ok了。

(完)

文档信息

iphone按home键后,正在运行的程序是否退出了呢?的更多相关文章

  1. 在VC++空工程中使用MFC类,采用Unicode字符集后,运行工程程序报错的解决方案

    创建一个VC++空工程,将Project Properties->General->Use of MFC改为Use MFC in a Shared DLL 新建一个源文件,内容如下 #in ...

  2. Window7中Eclipse运行MapReduce程序报错的问题

    按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...

  3. hadoop2.7.x运行wordcount程序卡住在INFO mapreduce.Job: Running job:job _1469603958907_0002

    一.抛出问题 Hadoop集群(全分布式)配置好后,运行wordcount程序测试,发现每次运行都会卡住在Running job处,然后程序就呈现出卡死的状态. wordcount运行命令:[hado ...

  4. iOS程序进入后台后仍运行定时器NSTimer

    由于本应用需要在应用进入后台后还要进行定时的检测功能,因此对于我来说怎样让APP在进入后台后 保持运行状态是比较大的需求.然后在iOS系统中是很难实现的,不管是 通过 音频还是 定位系统,我查找了一些 ...

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

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

  6. 解释器、环境变量、如何运行python程序、变量先定义后引用

    python解释器的介绍.解释器的安装.环境变量的添加为什么加环境变量.如何调取不同的解释器版本实现多版本共存.python程序如何运行的.python的变量定义 一.python解释器: 用来翻译语 ...

  7. 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】

    问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问.   解决方法:使用nohup命 ...

  8. iOS按home键后程序的状态变化

    iOS 的应用里的几种状态: active: 应用在前台正常运行 background: 应用在后台,并且在执行代码. inactive: 这个状态是应用从一个状态向另一个状态的过渡 suspende ...

  9. 汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

    我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕 ...

随机推荐

  1. CSS里常见的块级元素和行内元素

    根据CSS规范的规定,每一个网页元素都有一个display属性,用于确定该元素的类型,每一个元素都有默认的display属性值,比如div元素,它的默认display属性值为“block”,成为“块级 ...

  2. json改造优化无刷新分页

    index.html dd

  3. DOM查找元素

    1. 查找元素5种: 1. 按id查找1个元素对象: var elem=document.getElementById("id值"); 何时使用:1. 元素必须有id 2. 精确查 ...

  4. HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。

    现象 我们编码实现请求一个页面时,请求的代码类似如下代码: HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl); req.Us ...

  5. 也说说angularJs里的evalAsync

    虽说angular都快出2.0了,到了2.0这些东东都会被干掉.不过我们眼前的事还是要处理. $evalAsync和$timeout到底什么区别,网上说法很多,最近看到的是说在directive里就怎 ...

  6. [C#.net] SendMessage

    函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一.     函数原型:LRESU ...

  7. PHP 实现单一入口 apache配置

    在apache的httpd.conf加入,需要把LoadModule rewrite_module modules/mod_rewrite.so前面的“#”去掉 DocumentRoot / < ...

  8. 在Windows server 2008 R2上安装Python3.5

    最近弄了台机器,把以前的一些东西移植到这台机器上去,先远程看一下机器(其实就是一台虚拟机)配置,系统版本是Windows server2008R2 Enterprise,64位,4G内存,E7-885 ...

  9. iOS 字符串转son  json转字符串

    + (NSString*)dictionaryToJson:(NSDictionary *)dic {     NSError *parseError = nil;    NSData *jsonDa ...

  10. LightOJ Beginners Problems 部分题解

    相关代码请戳 https://coding.net/u/tiny656/p/LightOJ/git 1006 Hex-a-bonacci. 用数组模拟记录结果,注意取模 1008 Fibsieve's ...