我已经成功地在我正在开发的 iOS 应用程序中使用后台获取,但我注意到一个奇怪的错误,我在压缩时遇到了问题。
最初的症状是有时当我启动应用程序时,启动图像会显示,然后被黑屏取代。如果我点击主页按钮然后重新打开应用程序,一切都会好起来的,应用程序将按预期运行。我还注意到,如果我有一段时间没有使用该应用程序,这似乎只会发生。在添加了一堆日志之后,我意识到只有当操作系统在启动时触发了后台获取时,才会在启动时出现黑屏。似乎如果有一段时间没有完成提取,然后您启动应用程序,iOS 将在您当前启动的应用程序上触发“后台”提取。该错误仅在这种情况下发生。
我做了一些谷歌搜索,似乎这种行为的一个原因可能是您在应用程序生命周期的错误点触发动画。我对我的应用程序进行了审核,但没有发现太多。我还发现这个Stack Overflow 帖子描述了一个类似的问题,除了我的应用程序没有崩溃,而且我没有在我的application:performFetchWithCompletionHandler:
实现中对后台线程做任何事情。
我认为下一步将是提出一个仍然会导致问题的最小测试用例。因此,使用 Xcode 6.1,我创建了一个空白的单视图应用程序 (Swift)。然后我做了少量的工作来添加后台获取:
- 在我的目标的 Capabilities 屏幕上的 Background Modes 部分添加了“Background fetch”。
更新了 AppDelegate.swift 以包含相关的后台获取片段。
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum); return true } func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) { completionHandler(UIBackgroundFetchResult.NewData); } }
我没有进行其他更改,然后在设备上启动了该应用程序。为了让这种情况发生,我从 Xcode 运行了一些 Simulate Background Fetch 命令,在 Xcode 中停止了应用程序,然后等待了一段时间(大约 10 分钟)。然后,我从 Xcode 重新启动了该应用程序,并体验了在我的实际应用程序中发生的相同行为。
在这一点上,我无法断定这是 SDK 中的某种错误。有没有其他人见过这种情况?有解决方法吗?