是否一直有个疑问,当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. 韩服LOL

    ※◆☆★☆◆※欢迎使用韩服LOL辅助,如有疑问请联系作者QQ:82850696*2*测试版已停用*1*2014-8-27 14:05:59*哈密*E2873D0137C6D04F42E088AA46E ...

  2. Windows如何修改MySQL用户root密码

    听语音 浏览:16925 | 更新:2015-06-12 14:49 | 标签:windows 1 2 3 4 5 6 分步阅读 MySQL是一个关系型数据库管理系统,在 WEB 应用方面 MySQL ...

  3. Ruby:字符串处理函数

    字符串处理函数1.返回字符串的长度 str.length => integer 2.判断字符串中是否包含另一个串 str.include? other_str => true or fal ...

  4. 性能测试之--Apache JMeter安装

    Hi,今天给大家分享一下安装JMeter的相关内容~ Apache JMeter 是Apache组织的开源项目,是一个100%纯Java桌面应用,用于压力测试和性能测试. 它能够对HTTP.FTP服务 ...

  5. 优化后的 google提供的汉字转拼音类(针对某些htc等手机的不兼容情况)

    /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  6. 怎么计算Oracle的表一条记录占用空间的大小

    如何计算Oracle的表一条记录占用空间的大小? 如何计算Oracle的表记录占用空间的大小? 是把所有字段的大小都加起来吗?varchar(256),char,number算几个字节? ------ ...

  7. Unity加载模块深度解析(Shader)

    作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

  8. 安装vs2010,vs2015后,删除2015,导致vs2016打不开

    报错:Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(M ...

  9. jackson json转list

    今天项目中用到了jackson,经理说效率高一些,所以就开始用起来,一开始json转对象,对象转json还是很简单的,但也还是有一些问题,后来加了一点配置属性就没有报错了 ObjectMapper m ...

  10. svn 版本库的创建和配置

    1.创建SVN版本库 mkdir trunk svnadmin create /root/trunk/svntest #这里是路径和即将创建的版本库名称 2.配置svn cd /root/trunk/ ...