是否一直有个疑问,当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. css3中的字体样式

    text-overform:ellipsis省略号/clip裁剪. overform:hidden溢出隐藏文字. 但是text-overflow只是用来说明文字溢出时用什么方式显示,要实现溢出时产生省 ...

  2. python __call__内置函数

    __call__实现可以直接调用对象的作用

  3. nodejs笔记2

    下面在改变app.js的代码,可以通过不同的请求的url来返回不同的内容,注意1.html前的/不能省略,要细致 2.下面呢就是开始数据库的一些操作了 (1)在代码中引入模块var mongodb=r ...

  4. Windows平台下PHP开发环境的配置

    Windows平台下PHP开发环境的配置 一.基本环境 1.Windows XP 32位 2.Apache 2.2.25,下载地址:http://mirror.bit.edu.cn/apache/ht ...

  5. WInform关闭程序的几种方法以及区别。

    1.this.Close(); 关闭窗体,如果关闭的是主窗体 程序结束.2.Application.Exit(); 退出所有的窗体但是如果有托管线程的话无法完全退出3.Application.Exit ...

  6. TortoiseSVN客户端使用说明

    TortoiseSVN客户端使用说明 TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,下面对TortoiseSVN的菜单项做简要的说明.01.SVN Checkout ...

  7. Install Hbase

    1. You should guarantee you have installed hadoop on your computers. 2. Download and uncompress the ...

  8. 在RHEL6p5中设置网卡

    前提: 在用ifconfig -a查看时已经显示出wlan0(无线网卡)的存在(即不用装驱动,驱动另记) 工具: 1.yum install wpasupplicant* 2.yum install ...

  9. 统一SDK接入(U8SDK)——总体思路和架构

    题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360……据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢,多是大同 ...

  10. 练习1-21:编写程序entab,将空格串替换为最少数量的制表符和空格。。。(C程序设计语言 第2版)

    #include <stdio.h> #define N 5 main() { int i, j, c, lastc; lastc = 'a'; i = j = ; while ((c=g ...