【问题标题】:applicationDidBecomeActive firing on deactivation on iPhone XapplicationDidBecomeActive 在 iPhone X 上停用时触发
【发布时间】:2017-09-21 18:05:33
【问题描述】:

是否还有其他人遇到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”!

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

【问题讨论】:

  • 似乎有 3 个通知被快速连续触发:willResignActive / didBecomeActive / willResignActive。
  • 快速测试 - 如果您在 ipad pro 上进行此测试并尝试切换应用程序会发生什么?
  • @solenoid 不是 iPad 应用程序。任何其他 iPhone 都没有问题,只有 iPhone X。
  • @MartinR 所以理论上我们可以通过一些疯狂的定时/去抖动机制来解决这个问题。
  • 为什么它会混淆你的应用程序?它的行为就像应用程序被停用,然后又被激活和停用 - 这是可能发生的事情。

标签: ios iphone-x


【解决方案1】:

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

  1. UIApplicationWillResignActive
  2. UIApplicationDidBecomeActive
  3. UIApplicationWillResignActive

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

必须以对称的方式处理两个通知(即使存在该错误,它们也会得到适当的平衡):已完成的操作 “激活”上的“停用”必须颠倒。

【讨论】:

  • 我现在发现当用户从屏幕顶部拉下通知中心时,任何设备都会发生这种情况。
猜你喜欢
  • 2016-12-02
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多