gpt4 book ai didi

ios - 用户在 iOS 设备上向下滑动通知中心屏幕时意外调用 UIApplication.didBecomeActiveNotification 一次

转载 作者:行者123 更新时间:2023-11-28 07:27:12 33 4
gpt4 key购买 nike

正如标题所说,我在 iOS 11 和 12 中发现了这种意外行为。
有谁知道为什么调用此事件,更重要的是,是否有任何解决方法可以防止系统触发此 UIApplication.didBecomeActiveNotification 事件?

以下是重现此行为的步骤:

  1. 运行应用程序。
  2. 访问 iPhone 或 iPad 上的通知中心屏幕(通过从设备屏幕的最顶部向下滑动)。
  3. 当通知中心屏幕到达设备屏幕底部时,UIApplication.didBecomeActiveNotification 事件被触发。

您可以简单地在 AppDelegate.swift 文件中添加一个日志来进行测试,例如:

func applicationDidBecomeActive(_ application: UIApplication) {
print("applicationDidBecomeActive")
}

我称它为 unexpected 因为当通知中心屏幕出现时,应用程序实际上应该转向(至少是半)后台模式,而不是回到前台模式,除非通知中心屏幕出现消失(例如,向上滑动到屏幕的最上方)。
我还观察到当控制中心屏幕出现时,事件没有被触发。

在我的应用程序中,当应用程序进入后台(或半后台)时,我正在尝试控制视频播放器的状态。意外的 .didBecomeActiveNotification 事件扰乱了状态控制工作流。

我搜索了 Open Radar在这里用谷歌搜索了一段时间,没有出现这样的相关主题。

如有任何建议,我们将不胜感激。谢谢。

最佳答案

我遇到了同样的问题。我有一个解决方法,但您无法阻止额外的 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
}

关于ios - 用户在 iOS 设备上向下滑动通知中心屏幕时意外调用 UIApplication.didBecomeActiveNotification 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56215679/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com