iOS:如何判断应用程序何时暂停? [复制]

Posted

技术标签:

【中文标题】iOS:如何判断应用程序何时暂停? [复制]【英文标题】:iOS: How to tell when an app is going to suspend? [duplicate] 【发布时间】:2013-12-31 20:20:03 【问题描述】:

我想知道我的应用何时会暂停?一段时间内不活动或被用户终止的状态。我需要这个,因为我需要关闭一个 Web 套接字的连接。我想在应用程序处于后台状态时保持连接。

我该怎么做?

谢谢

【问题讨论】:

@dandan78 只用于进入后台,我想要应用程序暂停时的通知。 这应该重新打开。暂停与不活动(背景)不同 - gist.github.com/BadPirate/0a480b947744c8c0e326daa4ab479b09 可能更好地复制(并回答)***.com/a/59955755/285694 Suspend 不是背景,所以应该删除重复的标签! 【参考方案1】:

你也可以添加通知观察者

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(receiveSuspendNotification:)
                                             name:UIApplicationWillResignActiveNotification
                                           object:nil];

- (void) receiveSuspendNotification:(NSNotification*)notif


方法将被调用,您可以执行所需的任务。

【讨论】:

当您可以使用NikosM.答案中的方法时,为什么要向通知中心添加通知观察者。添加另一个调用似乎有点多余,不是吗。 如果您在应用委托以外的地方做某事,我发现通知是一种更简洁的方法。 ***.com/users/980097/popeye,因为它不起作用。截至 2017 年,这会显示应用何时进入后台,但不会显示应用在 停留在后台几分钟后暂停的时间。 这是Inactive状态,挂起和Inactive不同。【参考方案2】:

如果您的应用没有注册在后台运行,那么当收到 UIApplicationDidEnterBackgroundNotification 时,您的应用将暂停在 RAM 中。

【讨论】:

【参考方案3】:

在您的 AppDelegate.m 文件中,当用户点击主页按钮并且应用程序将转到后台时,将调用此方法(在这里您可以保持连接,但您应该阅读有关后台任务的苹果文档,因为如果应用程序保留在后台,您的连接将无法永久存在。还有其他方法可以使您的应用程序保持最新状态,例如推送通知更新等):

- (void)applicationWillResignActive:(UIApplication *)application

    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

当应用程序终止(从多任务处理完全关闭)时,将调用此方法。

- (void)applicationWillTerminate:(UIApplication *)application

    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

您可以在此方法中处理您的连接。

【讨论】:

“暂停”不是“背景”。 我可以澄清一下,因为我对此有点困惑,当应用程序长时间处于后台并且ios杀死应用程序时,是否会调用applicationWillTerminate?如果您从后台返回,我有一个应用程序在后台 10 多分钟后重新启动。 @jeraldo 不,您无法知道您的应用程序何时从背景状态变为挂起状态。 iOS 不会“杀死”应用程序,请参阅 developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 这是完全错误的。这会告诉您的应用何时进入后台,而不是何时暂停。 没有。这不是应用程序暂停的时候。这会在应用程序进入后台时捕获。

以上是关于iOS:如何判断应用程序何时暂停? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 检测 iOS 应用程序何时出现在前台? [复制]

iOS 9:如何检测用户何时对推送通知请求说“不允许”? [复制]

在 iOS 应用程序的生命周期中何时触发 ARC? [复制]

何时使用 socket.io ?以及何时使用简单的 Http 调用? [复制]

如何检测 App 何时移入/移出 Suspended 状态?

如何判断 FB.init() 何时完成?如何判断用户何时未连接应用程序启动?