应用程序在挂起时静默终止。 (用户在我的应用程序上按下锁定按钮)

Posted

技术标签:

【中文标题】应用程序在挂起时静默终止。 (用户在我的应用程序上按下锁定按钮)【英文标题】:App silently terminating while suspended. (User presses lock button while on my app) 【发布时间】:2017-08-31 21:31:07 【问题描述】:

我知道下面的文档,但即使在阅读之后,我似乎仍然不明白为什么它会终止我的应用程序。

应用必须随时准备终止,不应等待保存用户数据或执行其他关键任务。系统启动的终止是应用程序生命周期的正常部分。系统通常会终止应用程序,以便它可以回收内存并为用户启动的其他应用程序腾出空间,但系统也可能会终止行为异常或未及时响应事件的应用程序。 暂停的应用程序在终止时不会收到通知;系统杀死进程并回收相应的内存。如果应用程序当前正在后台运行且未挂起,则系统会在终止之前调用其应用程序委托的 applicationWillTerminate:。设备重启时系统不会调用该方法。 除了系统终止您的应用程序外,用户还可以使用多任务 UI 显式终止您的应用程序。用户发起的终止与终止暂停的应用程序具有相同的效果。应用程序的进程被杀死,并且没有通知发送到应用程序。

我只有一个应用程序在后台,所以我无法想象它会终止我的应用程序,因为它需要更多内存。但是我注意到文档还说如果应用程序行为不端可能会被终止,有人知道这到底是什么意思吗?我的 info.plist 中是否缺少某些内容?我是否违反了某种强制终止我的应用程序的协议?当它终止我的应用程序时,它似乎也总是非常随机的,可能只有 15 分钟,也可能是 1 小时。

我也环顾四周,在这里看到了这个帖子

Will ios terminate the app running in background after a specific time?

如果我的应用程序要在后台终止,而用户要在此期间做其他事情,我会理解,但我不明白为什么当它专门从锁定按钮暂停时它会被终止。尤其是当我在内存中只有我的应用程序的 iphone 6s 上进行测试时。

【问题讨论】:

您是否使用任何后台模式?如果没有,那么 iOS 可能刚刚决定您的应用程序没有被使用,并且可以从内存中清除它。即使您没有运行其他应用程序,操作系统也在运行任务 @Paulw11 后台模式是后台获取和远程通知。我知道它“可以”从内存中清除,但我真的怀疑它是否会清除我的应用程序,因为它需要更多内存或他们在文档中列出的任何原因。此外,如果它在没有充分理由的情况下如此轻易地被清除,这将与苹果将应用程序留在内存中而不是始终终止它们的动机相矛盾。 【参考方案1】:

您查看过崩溃日志吗?有些事情会导致您在后台运行时被终止,例如当您不在屏幕上时进行 OpenGL 调用。

或者,您的应用程序中可能存在导致其崩溃的错误,而系统实际上并未终止您。连接设备,转到 Xcode>Window>Devices & Simulators 并查看崩溃时设备的设备日志。

这可能会给你一个线索。

【讨论】:

我已经检查了我的崩溃日志,不幸的是没有运气,我的应用似乎没有崩溃。 如果系统正在杀死您的应用程序,系统控制台日志中也会显示一条消息。

以上是关于应用程序在挂起时静默终止。 (用户在我的应用程序上按下锁定按钮)的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSessionDownloadTask 在挂起时继续下载

已安排本地通知,但未在挂起和未运行模式下传递

iOS BLE使用(用户)杀死App进行扫描

由于 SystemEvents.OnUserPreferenceChanged 事件,WinForms 应用程序挂起

应用程序挂起时如何使用 UIApplicationLaunchOptionsLocationKey 监视地理围栏区域

当应用程序挂起时,我如何知道 NSURLSessionUploadTask 是不是正在工作?