背景和暂停的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按钮后立即切换到另一个应用程序。虽然您切换到另一个没有终止应用程序的应用程序,但可以将应用程序配置为执行后台进程以完成上载。
- 在后台的应用程序并不一定意味着它被暂停,但暂停的应用程序在后台。
- 应用程序可以请求在后台模式中保留额外的时间(例如,为了在后台播放音频或完成网络请求);之后它将进入暂停状态,否则将被系统强行终止。
暂停:
- 不执行代码 - 应用程序处于挂起状态时不执行代码。
- 处于挂起状态的应用程序也处于后台状态。
- 系统会将应用程序移动到此状态,而不会事先通知您。
- 处于暂停状态的应用程序仍在内存中。
一些可能对此主题有帮助的其他信息:
- UIApplication通过AppDelegate中的方法通知应用程序状态转换。 大多数状态转换都伴随着这些方法。 这些方法是UIApplicationDelegate协议的一部分。 它们为您提供了应对状态变化的机会。 例如,下面的方法告诉代表何时应用程序即将终止。 - 只有当应用程序在后台被终止之前才会被调用;没有停职。 func applicationWillTerminate(_ application:UIApplication){...}
- 除了Charlie Price从2013年开始的回答,iOS现在还允许以下背景: 远程通知,表示有新内容可供下载。当远程通知到达时,系统会在后台启动或恢复应用程序,并为其提供少量时间来下载新内容。 CORE BLUETOOTH在后台与蓝牙配件通信。 Click here for more details
- UIApplication.shared.backgroundTimeRemaining告诉您在系统终止应用程序之前剩余的秒数。 3分钟是最长时间限制,但这次每次在后台模式中唤醒应用程序时都会重新启动。
- 您可以阻止您的应用进入后台或挂起状态,而是通过在info.plist中将UIApplicationExitsOnSuspend键设置为YES来立即终止。
- 您可能会发现有用的其他链接: https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle/preparing_your_app_to_run_in_the_background/about_the_background_execution_sequence https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b https://qph.fs.quoracdn.net/main-qimg-473264d5d9f0ec16d57b8dffcc9824d8
以上是关于背景和暂停的app状态之间的混淆的主要内容,如果未能解决你的问题,请参考以下文章
append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]