如何确定iOS应用程序处于活动状态或非活动状态?

9

我需要知道应用程序在前台时,它是处于活跃状态还是非活跃状态?

如果我的应用程序处于非活跃状态,我需要触发注销协议并销毁当前用户的会话。

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"App is not active logout success");
}

有没有任何appDelegate方法可以告诉我应用程序处于非活动状态,任何代码示例都会帮助我很多。

如果需要使用 "NSNotificationCenter" ,我应该在哪个类中添加代码并且谁会成为观察者。


默认的应用程序代理已经提供了你所需要的内容。请阅读函数内的注释。 - Raptor
@Tchami 如果问题是关于iOS的,那怎么会是重复的呢? - Mark Rotteveel
2个回答

8

为了测试状态,您可以这样做:

[[UIApplication sharedApplication] applicationState]==UIApplicationStateInactive

或者
[[UIApplication sharedApplication] applicationState]==UIApplicationStateActive

如果您想要接收通知,可以执行以下操作:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(yourselector:)
                                                 name:UIApplicationDidBecomeActiveNotification object:nil];

或者

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(yourselector:)
                                                 name:UIApplicationDidEnterBackgroundNotification object:nil];

你还可以使用其他通知(来自https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/):

UIApplicationDidBecomeActiveNotification UIApplicationDidChangeStatusBarFrameNotification UIApplicationDidChangeStatusBarOrientationNotification UIApplicationDidEnterBackgroundNotification UIApplicationDidFinishLaunchingNotification UIApplicationDidReceiveMemoryWarningNotification UIApplicationProtectedDataDidBecomeAvailable UIApplicationProtectedDataWillBecomeUnavailable UIApplicationSignificantTimeChangeNotification UIApplicationUserDidTakeScreenshotNotification UIApplicationWillChangeStatusBarOrientationNotification UIApplicationWillChangeStatusBarFrameNotification UIApplicationWillEnterForegroundNotification UIApplicationWillResignActiveNotification UIApplicationWillTerminateNotification UIContentSizeCategoryDidChangeNotification

如果您想使用应用程序委托,可以使用:

- (void)applicationDidEnterBackground:(UIApplication *)application {}

或者

- (void)applicationDidBecomeActive:(UIApplication *)application {}

嘿,谢谢,你解决了我50%的问题,我需要更多的帮助,我需要与UIApplicationDidBecomeActiveNotification相反的东西,比如UIApplicationDidBecomeInActiveNotificationUIApplicationWillBecomeINActiveNotification - Nasir
我更新了我的回答。你可以使用UIApplicationDidEnterBackgroundNotification。一个应用在变得不活跃之前会进入后台。 - Josh Gafni
1
很棒的回答 :) 在那里肯定找到了一些日常使用的有用东西。 - Gil Sand
是的,我知道这些事情,但它们中没有一个对我有价值。让我告诉你场景,1)应用程序启动(应用程序始终在前台,永远不会进入后台)2)假设暂时(比如说_60秒_)应用程序没有收到用户事件。3)这意味着在_60秒_后,应用程序进入非活动状态。4)在_60秒_后(处于非活动状态),我将触发注销协议。 - Nasir
你可能会发现这很有帮助。https://dev59.com/NGw15IYBdhLWcg3wYasx. 你可以在后台运行长达10分钟的任务。也许你可以设置一个60秒的计时器,然后调用你的 logout 方法,除非应用程序重新变为活动状态? - Josh Gafni

0
请参考该苹果文档:App 生命周期 applicationDidBecomeActive:—让您的应用知道它即将成为前台应用程序。使用此方法进行任何最后一刻的准备。 applicationWillResignActive:—让您知道您的应用正在从前台应用程序转换。使用此方法将您的应用程序放入静止状态。 applicationWillEnterForeground:—让您知道您的应用正在从后台返回前台,但它尚未激活。 applicationWillTerminate:—让您知道您的应用正在被终止。如果您的应用程序被挂起,则不会调用此方法。

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