【问题标题】:iOS how to detect when app was removed from processiOS如何检测应用程序何时从进程中删除
【发布时间】:2013-07-24 17:27:30
【问题描述】:

检测应用程序何时关闭的委托方法是什么。

我的意思是当用户点击这个按钮时:

我知道以下方法:

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

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

但在我的情况下,它们的工作方式与我预期的不同。例如,我使用了我的应用程序并导航到了某个屏幕。如果我锁定屏幕并返回应用程序,应用程序调用 applicationWillEnterForeground 但我不需要这个,因为我仍在此视图中(例如测试屏幕视图)并且我不需要检查任何更改。但是如果我的应用程序关闭,我会开始从启动应用程序(例如主屏幕)导航。因此,如果我的应用程序已关闭并且我在主屏幕上,我需要检查以前是否有一些操作(例如,如果我通过了测试屏幕视图的测试)并呈现此视图控制器(仅在我关闭应用程序的情况下)只是锁定它或进入背景)。

感谢您的帮助。

【问题讨论】:

    标签: ios


    【解决方案1】:

    您无法检测到这一点。来自iOS App Programming Guide(“应用程序终止”标题):

    重要提示:如果您的应用当前已暂停,则不会调用 applicationWillTerminate: 方法。

    即使您使用 iOS SDK 4 及更高版本开发应用程序,您仍然必须 准备好在没有任何通知的情况下杀死您的应用程序。这 用户可以使用多任务 UI 显式终止应用程序。此外, 如果内存受到限制,系统可能会从 内存以腾出更多空间。暂停的应用程序不会收到通知 终止,但如果您的应用当前正在后台运行 状态(而不是挂起),系统调用 applicationWillTerminate:您的应用委托的方法。你的应用不能 从此方法请求额外的后台执行时间。

    【讨论】:

    【解决方案2】:

    你不能。当您的应用程序以这种方式被杀死时,它不会被告知任何事情。该应用程序被操作系统杀死,没有任何警告。

    当您的应用程序进入后台时,您无法知道是重新启动还是简单地返回前台。因此,当应用进入后台时,您必须妥善处理。

    当应用再次启动时,恢复您需要的任何状态。

    【讨论】:

      【解决方案3】:

      在 iOS 上,您无法检查。那就是:进程被SIGKILL'ed。我知道可能会起作用的一种方法是,要杀死一个应用程序,必须先按主页按钮将其挂起。

      因此,您可以在用户使用应用程序时收集您的操作,并在用户暂停应用程序时将其提交到保存的位置。如果用户恢复,请重置列表并再次开始收集信息。但是,如果用户暂停应用并且您从未收到简历,则在下一次应用启动时,您可以阅读列表并从那里恢复。

      HTH

      【讨论】:

        【解决方案4】:

        您可以实现UIApplicationDelegate 委托的-applicationWillTerminate: 方法来响应终止事件。但是,不能保证在所有情况下都会调用它,所以你不应该依赖它被调用。根据iOS App Programming Guide

        如果您的应用在终止时正在运行(在前台或后台),系统会调用您的应用代理的 applicationWillTerminate: 方法,以便您可以执行任何所需的清理。您可以使用此方法保存用户数据或应用程序状态信息,以便在后续启动时将应用程序恢复到当前状态。您的方法有大约 5 秒的时间来执行任何任务并返回。如果它没有及时返回,应用程序将被杀死并从内存中删除。

        重要提示:如果您的应用当前处于暂停状态,则不会调用 applicationWillTerminate: 方法。

        【讨论】:

        • 这里的一个重要结论是,如果您希望有最好的机会检测到这一点,您需要始终让您的应用程序在后台运行。可能不适用于 App Store 应用的选项(但可能适用于不需要批准的非 App Store 应用)。
        猜你喜欢
        • 1970-01-01
        • 2016-11-24
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        相关资源
        最近更新 更多