背景和暂停的app状态之间的混淆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背景和暂停的app状态之间的混淆相关的知识,希望对你有一定的参考价值。

我对这两个州有点困惑。以下是我的理解;

当应用程序处于后台时,如果你在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:在这种状态下,您的应用程序不再处于前台,但它仍然可以运行代码。

暂停:当您的应用无法再运行代码时,您的应用就会进入此状态。

另一答案

背景:

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

暂停:

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

一些可能对此主题有帮助的其他信息:

以上是关于背景和暂停的app状态之间的混淆的主要内容,如果未能解决你的问题,请参考以下文章

暂停和恢复背景音乐,而其他播放之间

append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]

JavaFX - 在两者之间暂停调用UI更新方法

关于片段生命周期

使用 BottomNavigationView 在它们之间切换时保留片段状态

微信小程序播放背景音乐