9

我对这两种状态有点困惑。以下是我的理解;

当应用程序在后台并且如果您"Application does not run in background"在 App plist 文件中设置为 NO 时,应用程序将继续在后台运行。在挂起模式下,应用程序留在内存中但不执行代码!当 App 进入 Suspended 状态时,系统不会通知 App,并在内存不足的情况下从内存中清除 App,为前台 App 腾出空间。

我的理解正确吗?如果是这样,那么当应用程序在后台运行并执行代码时,为什么我不在控制台上打印我的 NSLog?我不断从服务器获取数据的 TCP 套接字连接实际发生了什么?为什么我们需要暂停状态,因为无论如何系统最终会在内存不足的情况下从内存中清除 App。App从暂停状态变为活动状态或重新开始有什么区别吗?

4

3 回答 3

8

您应该查看IOS App Programming Guide 部分“App States and Multitasking”。通过搜索 Xcode 文档并将短语“App States and Multitasking”和“Hits Must”项设置为“Match Search Term”来找到它。另一个有用的搜索短语:“后台执行”。

总结的答案是,应用程序可以无限期地在后台继续“执行”,原因有限:

在 iOS 中,只允许特定类型的应用程序在后台运行:

  • 在后台向用户播放有声内容的应用程序,例如音乐播放器应用程序
  • 让用户随时了解其位置的应用程序,例如导航应用程序
  • 支持互联网协议语音 (VoIP) 的应用程序
  • 需要下载和处理新内容的报亭应用
  • 从外部配件接收定期更新的应用程序

除了这些特定操作之外,应用程序还可以要求在很短的时间内继续执行,文档在“在后台执行有限长度任务”部分中对此进行了介绍。不久之后,您的应用程序要么告诉系统它已完成(然后被挂起),要么它被强制终止。文档中的详细信息。

该文档的另一个有用部分是“管理应用程序状态更改”部分,其中包含漂亮的状态图。该部分讨论了进入后台和返回前台。它应该回答您关于重新开始与从暂停状态开始之间的区别的问题。简短(不太正确)的答案是,如果您从暂停状态开始并且在进入后台或(重新)进入前台时不采取任何特殊操作,那么您只是或多或少地从您所在的位置继续. 此外,从挂起状态开始更快。阅读文档,因为它说的比我的解释要好得多。

于 2013-02-26T15:23:33.300 回答
3

应用状态

未运行:您的应用在启动之前处于此状态。

活动:一旦您的应用程序启动,接收事件。

非活动:当您的应用程序正在运行但发生某些事情中断它时,例如电话,它会变为非活动状态。非活动意味着应用程序仍在前台运行,但它没有接收事件。

后台:在这种状态下,您的应用程序不再处于前台,但它仍然能够运行代码。

已暂停:您的应用程序在无法再运行代码时进入此状态。

于 2016-04-06T13:10:19.013 回答
2

背景:

  • 执行代码 - 代码在应用程序处于后台状态时执行。
  • 应用程序必须先进入后台状态,然后才能进入挂起状态。
  • IE。假设您在 Facebook 上并上传了一个视频,并且您在按下 POST 按钮后立即快速切换到另一个应用程序。尽管您切换到另一个应用程序而无需终止该应用程序,但该应用程序可以配置为执行后台进程以完成上传。
  • 处于后台的应用程序并不一定意味着它被暂停,但被暂停的应用程序处于后台。
  • 应用程序可以请求在后台模式下停留额外的时间(例如,为了在后台播放音频或完成网络请求);之后它要么进入挂起状态,要么被系统强行终止。

暂停:

  • 不执行代码 - 应用程序处于挂起状态时不执行代码。
  • 处于挂起状态的应用程序也处于后台状态。
  • 系统会将应用程序移至此状态,而不会事先通知您。
  • 处于挂起状态的应用程序仍在内存中。

一些可能对您有所帮助的附加信息:

于 2019-03-12T09:27:21.013 回答