在 iOS 13 中,当用户在应用程序切换器中向上滑动我的应用程序时,我会得到什么事件?
In iOS 13, what events do I get when the user swipes my app up in the app switcher?
当用户在 iOS 13 上的应用程序切换器中向上滑动我的应用程序时,我发现很难对我收到(或没有收到)的事件进行分类和说明。这似乎是因为多场景支持引起的变化。在这种情况下我会遇到什么事件?
假设您的应用支持 window 场景。因此,用户在应用切换器中向上滑动的实际上是一个 场景 ,而不是整个应用。那么出现的可能性如下
iPhone
如果场景在最前面:
sceneDidEnterBackground
applicationWillTerminate(_:)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用不是 运行.
在 iPad 上,如果该应用 不 支持多个 windows
如果场景在最前面:
sceneDidDisconnect(_:)
application(_:didDiscardSceneSessions:)
applicationWillTerminate(_:)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用不是 运行.
在 iPad 上,如果应用 支持多个 windows
如果场景在最前面:
sceneDidEnterBackground
applicationWillTerminate(_:)
(也许)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用未 运行 或该应用未终止(如果有另一个 window) .如果该应用程序仍然是 运行,您可能会得到 sceneDidDisconnect(_:)
,稍后可能会得到 application(_:didDiscardSceneSessions:)
。
结论
这里有什么奇怪的人?这是我们 运行 在 iPad 上的情况,我们支持场景但 不 多个 windows。我们没有得到 sceneDidEnterBackground
!我认为这是不连贯的。由于我们不支持多个 windows,这基本上是一个 iPhone 应用程序,它的行为应该像一个 iPhone 应用程序。我不应该仅仅因为我的应用程序同时在 iPhone 和 iPad.
上运行而将我的代码加倍
在我的例子中,我想在应用程序被用户或系统终止时保存用户状态,applicationWillTerminate(_:)
大多数时候我不会被调用。
我通过使用 sceneWillResignActive(_ scene: UIScene)
实现了我想要的
当用户在 iOS 13 上的应用程序切换器中向上滑动我的应用程序时,我发现很难对我收到(或没有收到)的事件进行分类和说明。这似乎是因为多场景支持引起的变化。在这种情况下我会遇到什么事件?
假设您的应用支持 window 场景。因此,用户在应用切换器中向上滑动的实际上是一个 场景 ,而不是整个应用。那么出现的可能性如下
iPhone
如果场景在最前面:
sceneDidEnterBackground
applicationWillTerminate(_:)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用不是 运行.
在 iPad 上,如果该应用 不 支持多个 windows
如果场景在最前面:
sceneDidDisconnect(_:)
application(_:didDiscardSceneSessions:)
applicationWillTerminate(_:)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用不是 运行.
在 iPad 上,如果应用 支持多个 windows
如果场景在最前面:
sceneDidEnterBackground
applicationWillTerminate(_:)
(也许)
但如果场景不在最前面,你将一无所获;您已经收到 sceneDidEnterBackground
,现在不会收到 applicationWillTerminate(_:)
,因为该应用未 运行 或该应用未终止(如果有另一个 window) .如果该应用程序仍然是 运行,您可能会得到 sceneDidDisconnect(_:)
,稍后可能会得到 application(_:didDiscardSceneSessions:)
。
结论
这里有什么奇怪的人?这是我们 运行 在 iPad 上的情况,我们支持场景但 不 多个 windows。我们没有得到 sceneDidEnterBackground
!我认为这是不连贯的。由于我们不支持多个 windows,这基本上是一个 iPhone 应用程序,它的行为应该像一个 iPhone 应用程序。我不应该仅仅因为我的应用程序同时在 iPhone 和 iPad.
在我的例子中,我想在应用程序被用户或系统终止时保存用户状态,applicationWillTerminate(_:)
大多数时候我不会被调用。
我通过使用 sceneWillResignActive(_ scene: UIScene)