iOS如何判断应用程序是在前台运行还是后台运行?

Posted

技术标签:

【中文标题】iOS如何判断应用程序是在前台运行还是后台运行?【英文标题】:iOS how to judge application is running foreground or background? 【发布时间】:2012-01-07 15:18:07 【问题描述】:

众所周知,如果 ios 应用在前台运行,那么当删除通知到来时,该应用不会通知用户。现在在我的应用程序中,我想显示警报以通知用户远程通知来了。如何判断app是运行在前台还是后台?我找到了文档并搜索了 ***.com,但没有找到任何相关信息。 谢谢。

【问题讨论】:

抱歉我的拼写错误。 【参考方案1】:

[UIApplication sharedApplication].applicationState 将返回当前状态,检查可能的值,并且在您可以使用系统功能时不要创建不必要的标志。

您可能需要考虑的值:

UIApplicationStateActive UIApplicationStateInactive UIApplicationStateBackground

例如

+(BOOL) runningInBackground

    UIApplicationState state = [UIApplication sharedApplication].applicationState;
    return state == UIApplicationStateBackground;


+(BOOL) runningInForeground

    UIApplicationState state = [UIApplication sharedApplication].applicationState;
    return state == UIApplicationStateActive;

【讨论】:

太棒了,你的回答很棒! 不知道该属性 - 方便! 可能的值为:UIApplicationStateActiveUIApplicationStateInactiveUIApplicationStateBackground 还有,UIApplicationStateActive【参考方案2】:

在某些情况下检查状态不起作用。

这是我遇到的一个问题:如果您尝试使用 BT 并且它被禁用,iOS 会弹出一个对话框询问用户是否要打开 BT。发生这种情况时,应用程序状态不是确定您的应用程序是否在前台的可靠方法。

首先,您将收到两个 applicationDidBecomeActive 事件 - 一个(正确)在应用出现时,然后另一个(错误)在用户按下对话框中的按钮后(而 iOS 设置是最前面的应用) .

UIApplication.applicationState 会说“活动”,即使情况并非如此(至少如果您将“活动”解释为在前台,就像原来的问题一样)。

由于您在首次启动时没有得到 willEnterForeground,因此检测应用程序是否可见的唯一可靠方法(据我所知)是设置一个标志,然后将其设置为 true在:

applicationDidFinishLaunching
applicationWillEnterForeground

假的:

applicationDidEnterBackground
applicationWillResignActive 

【讨论】:

感谢您的回答 NJ,自从您发布此消息以来,您认为这仍然可靠吗? 是的,我不知道有任何情况下它不起作用。 如果您有 VoIP 应用程序,这将不起作用。在设备启动时它会自动启动,你只会得到applicationDidFinishLaunching,你会假设它在前台(因为你不会得到applicationWillEnterForeground),但实际上它是在后台,正如applicationState 正确说明的那样。所以 Pavel Oganesyan 是对的,但是您需要同时检查 UIApplicationStateActiveUIApplicationStateInactive 状态以了解正确的前台状态。 纠正 voip 应用程序,遗憾的是,似乎没有可靠的方法来确定前台状态...

以上是关于iOS如何判断应用程序是在前台运行还是后台运行?的主要内容,如果未能解决你的问题,请参考以下文章

Android判断应用在前台还是后台运行(判断应用前后台切换)

Android判断应用在前台还是后台运行(判断应用前后台切换)

如何在ios中每n秒连续在后台线程中运行一个进程

判断你的应用在前台还是在后台

在 iOS 应用程序中安排每 n 分钟运行一次的后台任务

如何检查Android应用程序是在后台还是前台或终止?