【发布时间】:2020-02-22 15:53:04
【问题描述】:
当用户在 iOS 13 上的应用切换器中向上滑动我的应用时,我发现很难对我收到(或没有收到)的事件进行分类和解释。这似乎是由于多场景支持。在那种情况下我会遇到什么事件?
【问题讨论】:
当用户在 iOS 13 上的应用切换器中向上滑动我的应用时,我发现很难对我收到(或没有收到)的事件进行分类和解释。这似乎是由于多场景支持。在那种情况下我会遇到什么事件?
【问题讨论】:
假设您的应用支持窗口场景。所以用户在应用切换器中向上滑动的实际上是一个场景,而不是你的整个应用。那么可能性似乎如下。
如果场景在最前面:
sceneDidEnterBackgroundapplicationWillTerminate(_:)但如果场景不在最前面,你将一无所获;你已经收到了sceneDidEnterBackground,现在你不会收到applicationWillTerminate(_:),因为应用程序没有运行。
如果场景在最前面:
sceneDidDisconnect(_:)application(_:didDiscardSceneSessions:)applicationWillTerminate(_:)但如果场景不在最前面,你将一无所获;你已经收到了sceneDidEnterBackground,现在你不会收到applicationWillTerminate(_:),因为应用程序没有运行。
如果场景在最前面:
sceneDidEnterBackgroundapplicationWillTerminate(_:)(或许)但如果场景不在最前面,你将一无所获;您已经收到sceneDidEnterBackground,现在您不会收到applicationWillTerminate(_:),因为应用程序未运行或应用程序未终止(如果有另一个窗口)。如果应用程序仍在运行,您可能会收到sceneDidDisconnect(_:),稍后可能还会收到application(_:didDiscardSceneSessions:)。
这里有什么奇怪的人吗?这是我们在 iPad 上运行的情况,我们支持场景但不多个窗口。我们没有收到sceneDidEnterBackground!我认为这是不连贯的。因为我们不支持多个窗口,所以这基本上是一个 iPhone 应用程序,它的行为应该像一个 iPhone 应用程序。我不应该仅仅因为我的应用在 iPhone 和 iPad 上都运行而将我的代码加倍。
【讨论】:
sceneDidDisconnect 没有任何用途。当最后一个场景被解除时,它不会被可靠地调用。当应用程序从后台状态进入终止状态时,没有调用applicationWillTerminate的原因是什么?
sceneDidDisconnect(_:) 和 application(_:didDiscardSceneSessions:)。我认为 iPhone 与 iPad 没有什么不同,唯一决定生命周期或调用哪个生命周期的是启用或禁用多个窗口
就我而言,我想在应用程序被用户或系统终止时保存用户状态,applicationWillTerminate(_:) 大部分时间都不会为我调用。
我通过使用sceneWillResignActive(_ scene: UIScene)实现了我想要的
【讨论】: