【问题标题】:Why does my UIApplicationDelegate receive applicationDidBecomeActive when pulling down notification center?为什么我的 UIApplicationDelegate 在下拉通知中心时收到 applicationDidBecomeActive?
【发布时间】:2018-09-17 00:37:03
【问题描述】:

我在 XCode 中构建了一个没有任何功能的裸应用程序,并将日志记录语句放在 applicationDidBecomeActive 和 applicationWillResignActive 方法中。

当我向下滑动以显示通知中心时,我看到以下内容:

2018-01-03 10:18:16.867028+0000 BareProject[1165:2053601] 主动辞职

2018-01-03 10:18:17.510713+0000 BareProject[1165:2053601] 活动

2018-01-03 10:18:17.634805+0000 BareProject[1165:2053601] 主动辞职

这是故意的吗?我的代码在激活时做了很多工作,只是在大约 120 毫秒后再次将地毯从其中拉出,似乎文档说我应该使用 applicationDidBecomeActive 来重新启动任务: https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622956-applicationdidbecomeactive?language=objc

我在 ios 10.3 上试过这个,这个行为不存在。

【问题讨论】:

  • 这种行为在 iOS 12 中仍然存在。这太可怕了。
  • 有趣的是,当 iPhone 自己锁定时,这个问题也存在。首先applicationDidBecomeActive 然后立即applicationWillResignActive
  • 对我上面的评论:当通知中心已经完全覆盖屏幕时会发生这种情况。这是一个巨大的错误 IMO。
  • iOS15还是有这个问题

标签: ios


【解决方案1】:

看起来这是一个错误,使其成为常规行为

你需要寻找applicationDidEnterBackground

但是,如果您需要为此处理代码 当通知中心向下滑动时,您可以使用以下命令在 applicationDidBecomeActive 中不运行代码

class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var didEnterBackground = true
    
    func applicationDidBecomeActive(_ application: UIApplication) {
       if !didEnterBackground {
           return
       }
       didEnterBackground = false

       // run your code       
    }
    
    func applicationDidEnterBackground(_ application: UIApplication) {
        didEnterBackground = true
    }
    
}

【讨论】:

    【解决方案2】:

    实际上有两个问题,对applicationDidBecomeActive: 的意外调用和对applicationWillResignActive: 的重复调用。

    “下拉”显示在iOS 9上正常工作的通知中心。之前系统只调用了applicationWillResignActive:,刚刚用iOS 9模拟器验证过。

    在 iOS 11.2.6 上,applicationDidBecomeActive: 会按照您的描述被调用,这似乎是一个 Apple 错误。在这种特殊情况下,系统行为与文档冲突。这是另一个文档偏离您观察到的行为的示例https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforHandlingAppStateTransitions/StrategiesforHandlingAppStateTransitions.html#//apple_ref/doc/uid/TP40007072-CH8-SW10

    当您的应用移回活动状态时,其 applicationDidBecomeActive:方法应该反转任何步骤 在 applicationWillResignActive: 方法中获取。

    【讨论】:

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