我对这两个州有点困惑。以下是我的理解;
当应用程序处于后台时,如果你在App plist文件中将
"Application does not run in background"
设置为NO,那么App将继续在后台运行。在挂起模式下,App保留在内存中但不执行代码!系统在移动到Suspended状态时不会通知App,并在内存不足的情况下从内存中清除App以为前台Apps创建空间。
我的理解是否正确?如果是这样,那么当App在后台运行并执行代码时,为什么不在控制台上打印我的NSLog?我的TCP套接字连接实际发生了什么,我不断从服务器获取数据?为什么我们需要Suspended状态无论如何系统最终会在低内存情况下从内存中清除App。 App从暂停状态变为活跃状态还是重新开始是否有任何区别?
您应该查看IOS应用程序编程指南“应用程序状态和多任务”部分。通过搜索Xcode文档,并将短语“App States and Multitasking”和“Hits Must”项设置为“匹配搜索术语”来查找。另一个有用的搜索短语:“后台执行”。
摘要答案是,应用程序可以无限期地在后台继续“执行”,原因只有几个:
在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放用户可听内容的应用,例如音乐播放器应用
- 随时向用户通知其位置的应用,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要下载和处理新内容的报亭应用程序
- 从外部配件接收定期更新的应用程序
除了这些特定操作之外,应用程序可以要求继续执行非常短的时间,文档在“在后台执行有限长度任务”一节中介绍。在短时间内,您的应用程序告诉系统它已完成(然后暂停)或强行终止。文档中的详细信息。
该文档的另一个有用的部分,有很好的状态图,是“管理应用程序状态更改”部分。该部分讨论进入后台并返回前台。它应该回答你关于开始新鲜与从暂停状态开始之间的区别的问题。简短(不太正确)的答案是,如果您从暂停状态开始并且在进入后台时没有采取任何特殊操作或(重新)进入前景,那么您只需从您所在的地方继续或多或少地继续。此外,从暂停状态开始更快。阅读文档,因为它说它比我的释义要好得多。
应用状态
未运行:您的应用在启动之前处于此状态。
有效:启动应用后,接收活动。
非活动:当您的应用程序正在运行但有些事情发生中断时,就像打电话一样,它会变为非活动状态。非活动意味着应用程序仍在前台运行,但它没有接收事件。
Backgrounded:在这种状态下,您的应用程序不再处于前台,但它仍然可以运行代码。
暂停:当您的应用无法再运行代码时,您的应用就会进入此状态。
背景:
暂停:
一些可能对此主题有帮助的其他信息: