【问题标题】:How to determine app is in active state or inactive state ios?如何确定应用程序处于活动状态还是非活动状态ios?
【发布时间】:2015-03-20 21:11:17
【问题描述】:

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

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

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

是否有任何 appDelegate 方法告诉我应用程序处于非活动状态,任何代码示例都会对我有很大帮助。

如果需要使用“NSNotificationCenter”,我可以在哪个类中添加代码以及谁将成为观察者。

【问题讨论】:

  • 模板中的默认应用代理已经提供了你需要的东西。读取函数中的 cmets。
  • @Tchami 如果这个问题是关于 iOS 的,那是怎么重复的?

标签: ios objective-c lifecycle user-inactivity


【解决方案1】:

要测试状态,您可以执行以下操作:

[[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
  • 我更新了我的答案。您可以使用 UIApplicationDidEnterBackgroundNotification。应用在变为非活动状态之前会经过后台处理。
  • 很好的答案 :) 在那里肯定找到了一些日常使用的有用的东西
  • 是的,我知道这些事情,但没有一件对我有价值。让我告诉你场景,1)应用程序启动(应用程序总是在前台永远不会进入后台)2)假设暂时(比如60sec)应用程序没有收到任何来自用户的事件。 3) 这意味着在 60sec 之后应用程序进入 inactive 状态。 4) 在 60 秒 之后(在 inactive 状态)我将触发注销协议。
  • 您可能会发现这很有帮助。 stackoverflow.com/questions/6650717/…。您可以在后台运行后台任务 10 分钟。也许你设置了一个 60 秒的计时器,然后调用你的注销方法,除非应用再次激活?
【解决方案2】:

请参考此 Apple 文档:App Life Cycle

applicationDidBecomeActive:——让你的应用知道它即将成为前台应用。使用此方法进行最后一分钟的准备。

applicationWillResignActive:——让您知道您的应用正在从前台应用过渡。使用此方法可将您的应用程序置于静止状态。

applicationWillEnterForeground:——让您知道您的应用正在移出后台并返回前台,但它尚未处于活动状态。

applicationWillTerminate:——让你知道你的应用程序正在被终止。如果您的应用被暂停,则不会调用此方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多