有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?
Posted
技术标签:
【中文标题】有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?【英文标题】:Is there a way to know my iOS app was killed by a privacy setting change? 【发布时间】:2014-05-21 05:35:03 【问题描述】:我的 ios 应用需要访问图片的权限才能正常运行。
当我发现以下情况时,我正在测试我的应用如何响应隐私设置的更改:每次我转到“设置”应用并更改我的应用的隐私设置(打开或关闭)时,我的应用在没有任何警告的情况下被杀死。
我在设备的控制台中找到了这些日志:
Apr 8 15:01:50 iPad Preferences[5924] <Warning>: ########### Quitting application (xxx) in response to privacy settings change.
Apr 8 15:01:50 iPad com.apple.launchd[1] (UIKitApplication:xxx[0xc7cb][6039]) <Notice>: (UIKitApplication:com.edupad.itoochdev[0xc7cb]) Exited: Killed: 9
Apr 8 15:01:50 iPad backboardd[30] <Warning>: Application 'UIKitApplication:xxx[0xc7cb]' exited abnormally with signal 9: Killed: 9
虽然我在我的应用程序委托中实现了applicationWillTerminate:
,但在应用程序被终止之前它似乎没有被调用。
我找不到任何相关文档,说明在我的应用程序被杀死之前我应该实施什么来获得通知。知道我能不能解决这个问题吗?
PS 1:我知道我可以实现applicationDidEnterBackground:
,但我想在以下情况下提供不同的用户体验(A)用户刚刚快速切换到设置应用程序以更改隐私设置或(B)用户想要继续前进,一段时间后不会回到应用程序
PS 2:如果您正在测试这类事情,请不要在您的应用程序通过 Xcode 启动时执行此操作,否则您会因 sigkill 而崩溃。
【问题讨论】:
您必须始终期望您的应用在切换到后台后可能会被杀死。即使用户快速进入隐私设置,他们也可以记住其他内容,进入不同的应用程序,等等。因此,您唯一的可能性可能是检查在进入后台和前台之间花费了多少时间。 【参考方案1】:通常情况下,如果您希望在应用被终止之前保存状态或清理代码,则需要定义块 beginBackgroundTaskWithExpirationHandler
。
您可以查看 Apple 的 WWDC 2012 文档,该文档讨论了从 iOS6 开始更改隐私设置时会发生什么。简而言之,它表示beginBackgroundTaskWithExpirationHandler
在发送 SIGKILL 之前被调用,因此您可以在那里处理清理代码。
还有另一个关于 Stack Overflow 的讨论。如果有人能找到它并在此处链接它会很有帮助。
【讨论】:
这在 iOS 10 中似乎不再适用以上是关于有没有办法知道我的 iOS 应用程序被隐私设置更改杀死了?的主要内容,如果未能解决你的问题,请参考以下文章