如何知道应用程序是被用户还是iOS终止(在10分钟后的后台)?

20
如何知道应用程序是由用户还是iOS终止并重新启动应用程序?
“由用户”意味着“双击Home按钮并按下-按钮”。被用户终止。
“由iOS”意味着“应用程序变为后台运行状态,并在10分钟后由iOS终止应用程序”。

2
为什么iOS会在后台运行10分钟后终止您的应用程序? - mayuur
我想知道用户是否关闭了应用程序(通过点击红色“-”按钮) - ChangUZ
2个回答

17

如果您的应用处于挂起状态,无论是 iOS 还是用户杀死了应用程序,applicationWillTerminate 都将不会被调用。

只有当您的应用程序在后台运行并被终止时(无论是由 iOS 还是用户),才会调用 applicationWillTerminate。这里的“后台”指的是应用程序在后台运行而不是挂起状态。

请参考这个链接

applicationWillTerminate:通知您的应用程序即将被终止。如果您的应用程序已挂起,则不会调用此方法。

下面是各种状态的表格 enter image description here

后台 - 应用程序在后台执行代码。大多数应用程序在进入挂起状态之前会短暂地进入此状态。但是,在请求额外执行时间的应用程序中,该状态可能会持续一段时间。此外,直接启动到后台的应用程序将进入此状态而非非活动状态。有关如何在后台执行代码的信息,请参阅后台执行。


10

如果系统资源不足,iOS可能会终止您的应用程序-如果发生这种情况,您将看到applicationWillTerminate

过去,如果用户杀死了应用程序(通过任务管理器,通过双击按钮然后点击红色“ - ”),那么这是一个SIGKILL,并且不会调用applicationWillTerminate。 2013年中期的一份报告表明,这种情况已经发生改变,现在会调用applicationWillTerminate

您可以使用NSUserDefaults在applicationWillTerminate中写入一些状态位以记录是否被该函数所调用,这大概是一个系统终止而不是用户终止。


3
关于:"如果用户关闭应用程序(使用任务管理器,通过双击按钮然后按下红色“ - ”),这是SIGKILL,applicationWillTerminate不会被调用。" 只是提醒一下,这种行为可能已经发生变化。我的团队中的另一位开发人员刚刚测试了这一点,并报告称在这种情况下调用了applicationWillTerminate - Steve Onorato
3
用调试器测试了一下:在没有调试器的情况下,应用程序将会调用applicationWillTerminate方法,这是使用Xcode控制台日志(iPhone5,运行iOS 7.1)记录的。 - ıɾuǝʞ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接