我对这两个州有点困惑。以下是我的理解;
当app处于后台时,如果你在App plist文件中将
"Application does not run in background"
设置为NO,那么App会继续运行 在背景中。在挂起模式下,App会保留在内存中但不会 执行代码!系统在移动到Suspended时不会通知App 在内存不足的情况下从内存中清除和清除应用程序,为前台应用程序创建空间。
我的理解是否正确?如果是这样,那么当App在后台运行并执行代码时,为什么不在控制台上打印我的NSLog?我的TCP套接字连接实际发生了什么,我不断从服务器获取数据?为什么我们需要Suspended状态无论如何系统最终会在低内存情况下从内存中清除App。应用程序从暂停状态变为活动状态或开始新鲜状态之间有什么区别吗?
答案 0 :(得分:3)
您应该查看 IOS应用程序编程指南部分“应用程序状态和多任务处理”。 通过搜索Xcode文档,并将短语“App States and Multitasking”和“Hits Must”项设置为“匹配搜索术语”来查找。另一个有用的搜索短语:“后台执行”。
摘要答案是,应用程序可以无限期地在后台继续“执行”,原因只有几个:
在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放用户可听内容的应用, 例如音乐播放器应用
- 让用户了解其内容的应用 始终位置,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要下载和处理新内容的报亭应用
- 从外部附件接收定期更新的应用
除了这些特定操作之外,应用程序可以要求继续执行很短的时间,文档在“在后台执行有限长度任务”一节中介绍。在短时间内,您的应用程序告诉系统它已完成(然后暂停)或强行终止。文档中的详细信息。
具有良好状态图的该文档的另一个有用的部分是“管理应用程序状态更改”部分。该部分讨论进入后台并返回前台。它应该回答你关于开始新鲜与从暂停状态开始之间的区别的问题。简短(不太正确)的答案是,如果您从暂停状态开始并且在进入后台时没有采取任何特殊操作或(重新)进入前景,那么您只需从您所在的位置继续或多或少地继续。此外,从暂停状态开始更快。阅读文档,因为它说它比我的释义要好得多。
答案 1 :(得分:3)
应用程序状态
未运行:您的应用在启动之前处于此状态。
有效:应用启动后,接收活动。
无效:当您的应用程序正在运行但有些事情发生中断时,就像电话一样,它会变为非活动状态。非活动意味着应用程序仍在前台运行,但它没有接收事件。
Backgrounded:在此状态下,您的应用不再处于前台,但它仍然可以运行代码。
暂停:当您的应用无法再运行代码时,您的应用就会进入此状态。
答案 2 :(得分:1)
背景:
已暂停:
一些其他可以帮助您解决此主题的信息:
UIApplication通过AppDelegate中的方法通知应用程序状态转换。
这些方法伴随着大多数状态转换。
这些方法是UIApplicationDelegate协议的一部分。
它们为您提供了响应状态变化的机会。
例如,下面的方法告诉委托人应用程序何时终止。
-仅在应用终止之前在后台运行时才调用;不暂停。
func applicationWillTerminate(_ application:UIApplication){...}
除了2013年Charlie Price的回答外,iOS现在还提供以下背景知识:
UIApplication.shared.backgroundTimeRemaining告诉您系统终止应用程序前还剩下多少秒。最长限制为3分钟,但是每次在后台模式下唤醒应用时,此时间都会重新开始。
您可以通过将info.plist中的UIApplicationExitsOnSuspend键设置为YES来防止应用进入后台或挂起状态,而立即终止。
其他链接可能会有用:
https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b
https://qph.fs.quoracdn.net/main-qimg-473264d5d9f0ec16d57b8dffcc9824d8