正如标题所说,我发现了这个意外iOS 11 和 12 中的行为。
有谁知道为什么要调用此事件,并且,更重要的是,是否有任何解决方法可以防止系统触发此问题UIApplication.didBecomeActiveNotification
事件出来了?
以下是重现此行为的步骤:
- 运行应用程序。
- 访问 iPhone 或 iPad 上的通知中心屏幕(通过从设备屏幕的最顶部向下滑动)。
- 当通知中心屏幕出现时到达设备屏幕的底部, a
UIApplication.didBecomeActiveNotification
事件被解雇。
您可以简单地在 AppDelegate.swift 文件中添加日志进行测试,例如:
func applicationDidBecomeActive(_ application: UIApplication) {
print("applicationDidBecomeActive")
}
我称之为意外因为当通知中心屏幕出现时,应用程序实际上应该切换到(至少是半)后台模式,并且不会返回到前台模式,除非通知中心屏幕消失(例如,通过向上滑动到最上面的顶部)屏幕)。
我还观察到,当控制中心屏幕显示时,该事件没有被触发。
在我的应用程序中,我尝试在应用程序进入后台(或半后台)时控制视频播放器的状态。意想不到的.didBecomeActiveNotification
事件会扰乱状态控制工作流程。
我在打开雷达在这里,谷歌搜索了一段时间,没有出现这样的相关主题。
任何建议将不胜感激。谢谢。
我有同样的问题。我有一个解决方法,但你无法阻止额外的applicationDidBecomeActive
。至少我找不到。所以基本上我发现的是几毫秒后applicationDidBecomeActive
被呼叫,applicationWillResignActive
也会被呼叫。因此,如果代码在几毫秒后执行并不重要,这就是我正在做的事情:
private var firstDidBecomeActive = true
private var appDidBecomeActiveWorkItem: DispatchWorkItem?
func applicationDidBecomeActive(_ application: UIApplication) {
//Skip first time, because that is start of the app
if self.firstDidBecomeActive {
self.firstDidBecomeActive = false
return
}
self.appDidBecomeActiveWorkItem = DispatchWorkItem {
//Do what you want here
}
//Make sure there is a small delay because when user opens notification center, it becomes active again and then after a few milliseconds resigns active
DispatchQueue.main.asyncAfter(deadline: .now() + 0.02, execute: self.appDidBecomeActiveWorkItem!)
}
func applicationWillResignActive(_ application: UIApplication) {
self.appDidBecomeActiveWorkItem?.cancel()
self.appDidBecomeActiveWorkItem = nil
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)