繁体   English   中英

什么时候在iOS applicationDidBecomeActive之后立即调用applicationDidEnterBackground?

[英]When in iOS applicationDidEnterBackground called immediately after applicationDidBecomeActive?

在我们的应用程序中,每次用户打开我们的应用程序时,我们都会记录(使用外部分析服务)。 但是,我们注意到有许多奇怪的应用会话(几乎占总会话的 15%)。

在事件的设备时间戳之后,将调用以下方法:

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)

applicationDidBecomeActive(_ application: UIApplication)

viewDidAppear(_ animated: Bool) // App Splash Screen

applicationDidEnterBackground(_ application: UIApplication)

查看时间戳,从didFinishLaunchingWithOptionsapplicationDidEnterBackground的延迟非常短(<1 秒)。

我们的假设是,系统有时会在应用程序未被用户实际打开和“看到”的情况下唤醒应用程序。 但是我们找不到任何关于这种用例的文档,我们也无法自己重现这个问题。 有人经历过类似的事情吗?

编辑:我想补充一点,这些可疑会话通常(但不总是)链接到应用程序更新。

我不确定...

我想如果应用程序没有被用户终止或暂停,而是因为其他应用程序需要 memory 而被从 memory 中删除,那么几乎一个启动选项可以在需要时唤醒应用程序。 一些例子:

看看这里,看看您的应用程序可以使用哪些启动选项。 我不确定他们是否真的可以启动应用程序或者什么......

如果您想对此有更多了解,请确保将来记录导致应用程序启动的 launchoptionskey ...

您需要更多信息-我会扩展您的日志记录以将launchOptions字典转储到

application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)

查看UIApplication.LaunchOptionsKey ,可能涉及很多选项。 注意,如帮助所说:在用户直接启动应用程序的情况下,该词典的内容可能为空

 if let lop = launchOptions { 
   let toLog = lop.map{"\($0.0.rawValue) \($0.1)"}.joined(separator:"\n")
   // log the options
...}

我确实知道这可能与在 AppSwitcher 中进行预览有关,但这似乎不会触发didFinishLaunchingWithOptions ,除非您实际上将应用程序置于最前面。 也许 iPad 上有一些分屏的东西? 感觉就像是在无法通过启动屏幕的上下文中调用应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM