首页 > 代码库 > iphone按home键后,正在运行的程序是否退出了呢?

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

  是否一直有个疑问,当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了。