在 iOS 13+ 上使用 SwiftUI 时,确定后台状态的传统方法不再有效。例如:
AppDelegate 方法
applicationDidEnterBackground(_ application: UIApplication)
和 applicationDidBecomeActive(_ application: UIApplication)
不会被调用。
通知
didEnterBackgroundNotification
、willEnterForegroundNotification
、didBecomeActiveNotification
和willResignActiveNotification
不会发送。
作为替代方案,还有
UIWindowSceneDelegate
回调:
这些替换的问题在于它们特定于进入和离开前景的多个场景之一。它们没有提供一种简单明了的方法来确定整个应用程序是在前台还是在后台。确定应用程序前台/后台状态很重要,原因与用户界面无关。
当应用程序不在前台时,某些 iOS 功能会静默失败(通配符蓝牙扫描和 iBeacon 传输是两个例子。)我经常开发没有任何用户界面的 iOS 框架,所以我需要一种方法来确定应用程序背景/前景状态,而不依赖于在
sceneDidBecomeActive(_ scene: UIScene)
中粘贴一堆样板代码——我这样问是不合理的有人使用我的框架来做到这一点。是否有任何直接的方法可以使用 SwiftUI 确定应用程序在 iOS 13 上的前台/后台状态?
您也可以在 SwiftUI 中使用
sceneWillResignActive(_ scene: UIScene)
通知:
sceneWillEnterForeground(_ scene: UIScene)
sceneDidEnterBackground(_ scene: UIScene)
UIWindowSceneDelegate
UIApplication
didEnterBackgroundNotification
willEnterForegroundNotification