当用户明确杀死应用程序时,有没有办法调用函数?

Posted

技术标签:

【中文标题】当用户明确杀死应用程序时,有没有办法调用函数?【英文标题】:Is there a way to call a function when user explicitly kills the Application? 【发布时间】:2018-04-03 11:18:43 【问题描述】:

我已经在我的应用程序中实现了 firebase 推送通知。我正在使用 registerForRemoteNotifications / unregisterForRemoteNotifications 来启用和禁用推送通知。我已经实现了当用户登录并且应用程序处于后台状态时,用户将收到推送通知并且当用户从应用程序注销时将不会收到推送通知的功能(我在注销时调用此功能以禁用推送通知 [[UIApplication sharedApplication] unregisterForRemoteNotifications];)。 但主要问题是当用户明确终止应用程序推送通知时仍然启用。 我尝试使用 applicationWillTerminate 函数,但是当我明确终止/终止应用程序时,它会抛出错误“由于信号 9 而来自调试器的消息终止”。我知道 applicationWillTerminate 函数只会在应用程序当前在后台运行而不是挂起时被调用。有没有办法检查 App 何时从挂起状态变为未运行状态? (即应用程序被最小化,然后用户点击主页按钮两次并清除应用程序)。

【问题讨论】:

【参考方案1】:

当用户明确终止应用程序时,无法运行函数。您可以查看有关应用程序生命周期的 Apple 文档 - https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

【讨论】:

谢谢布达扬。关于当用户明确杀死应用程序时如何取消注册远程通知的任何建议?【参考方案2】:

您是否在 applicationWillTerminate 委托方法中取消注册通知

- (void)applicationWillTerminate:(UIApplication *)application;

【讨论】:

Apple 文档明确指出此方法适用于不支持后台模式的应用程序。所以也许你可以依赖这个委托方法。 谢谢班基姆。我已经在使用 applicationWillTerminate 委托方法,但它不起作用。当我明确杀死该应用程序时,它会抛出一个错误:“来自调试器的消息因信号 9 而终止”。并且应用程序在没有调用 applicationWillTerminate 方法的情况下终止。当用户明确杀死应用程序时,您知道其他取消注册通知的方法吗?

以上是关于当用户明确杀死应用程序时,有没有办法调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone App杀死我的iPhone音乐播放器?

当应用程序在颤动中被杀死/终止时,从后台事件启动应用程序

当应用被用户杀死时,工作管理器不工作。为啥?

如果再次调用 Javascript 函数,如何杀死它?

当 iOS 应用程序被暂停/杀死并且用户点击通知时如何处理 Firebase 推送通知?

“applicationWillTerminate”没有被迅速调用