applicationDidBecomeActive 在 iPhone X 停用时触发

applicationDidBecomeActive firing on deactivation on iPhone X

是否有其他人遇到 applicationDidBecomeActive 在新 iPhone X 上 停用 应用程序时错误触发的问题?

这是我的测试应用程序:

class ViewController: UIViewController {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder:aDecoder)
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(fired),
            name: .UIApplicationDidBecomeActive,
            object: nil
        )
    }

    @objc func fired(_:Any) {
        print("fired")
    }

}

运行 iPhone X 模拟器上的应用程序。自然地,我在控制台中看到了 "fired"。到目前为止,一切都很好。现在向侧面或向上滑动主页指示器,切换到不同的应用程序或调出应用程序切换器。我看到 "fired" 再次出现在控制台中!

这似乎是错误的,并且将我所有的应用程序都扔进了混乱中。我该如何应对在停用时收到激活通知?

事实上,当应用程序在 iPhone X 模拟器中停用时,会快速连续触发三个通知:

  1. UIApplicationWillResignActive
  2. UIApplicationDidBecomeActive
  3. UIApplicationWillResignActive

这是错误的(您可能想要提交错误报告),但如果用户 可能 停用 - 激活 - 快速停用应用程序,因此应用程序 无论如何都应该应付这种情况。

两个通知都必须以对称的方式处理(并且它们得到适当的平衡,即使有那个错误):已完成的操作 在 "activate" 上必须在 "deactivate" 上反转。