我的任务是调试为什么某些用户在打开应用程序时有时会遇到黑屏。我是这个特定应用程序的新手,所以我不知道整个流程,但我可以看出该应用程序具有后台功能。有一些任务在夜间运行。
在后台模式方面,我很难理解 iOS 应用程序的整个生命周期。
当应用程序从终止状态在后台启动时,我假设它didFinishLaunchingWithOptions
仍然会被调用。我看到我们在代码中有一个小检查,在这种情况下它省略了整个 UI 初始化:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
/*{ Initial setup }*/
if UIApplication.shared.applicationState == .background {
// App was launched due to Background Fetch event. No need for UI.
return true
}
/*{ Start UI }*/
return true
}
我怀疑当应用程序当前或最近由“系统”在后台运行时(从最初终止的状态)手动打开时,此代码会导致应用程序不显示 UI。这个对吗?这意味着在某些极端情况下,人们会在没有调用“{ Start UI }”的情况下打开应用程序。
我们还applicationDidBecomeActive
实现了,我认为应该使用它来确保在这种情况下呈现 UI。但是,现在这里只有一些可达性的东西:
func applicationDidBecomeActive(_ application: UIApplication) {
reachabilityManager?.startObserving()
}
我发现的大多数在线资源都没有具体显示应用程序是如何在后台启动的,例如这个在所有情况下总是过渡到的图表。didBecomeActive
所以问题1;评估状态的最佳实践方法是didFinishLaunchingWithOptions
什么?当前的实现是否在.background
最佳情况下省略了 UI?如果是这样,我是否应该执行检查以查看 UI 是否正在运行didBecomeActive
,如果不是则启动 UI?
引出问题2;如果我们应该在其中加载 UI didBecomeActive
,我们是否也应该在其中卸载或取消分配任何活动的 UI didEnterBackground
?
额外的问题:是否有可能用调试器实际重现这个?每次我用调试器启动应用程序时,它显然不在后台。如何调试从后台到前台的生命周期?
或者我可能在这里完全偏离目标,为什么有时某些用户没有 UI 可能有不同的原因?