![](/img/trans.png)
[英]Save UITableView property when applicationDidEnterBackground and load back it applicationDidBecomeActive in iOS
[英]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)
查看时间戳,从didFinishLaunchingWithOptions
到applicationDidEnterBackground
的延迟非常短(<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.