我已经成功地在我正在开发的iOS应用中使用了后台提取功能,但我发现了一个奇怪的错误,我遇到了麻烦。
最初的症状是,有时当我启动应用程序时,启动图像会显示,然后被黑屏取代。如果我点击主页按钮然后重新打开应用程序,一切都会好的,应用程序将按预期运行。我也注意到,如果我暂时没有使用该应用程序,这似乎只会发生。在添加了一堆日志记录后,我意识到只有在操作系统在启动时触发了后台提取时才会出现启动时的黑屏。似乎如果一段时间内没有完成提取,然后启动应用程序,iOS将触发一个"背景"获取您当前启动的应用。该错误仅发生在这种情况下。
我做了一些谷歌搜索,如果你在应用程序生命周期中的错误点触发动画,这似乎是造成这种行为的一个原因。我对我的应用程序进行了审核,并没有找到多少。我还发现this Stack Overflow帖子描述了一个类似的问题,除了我的应用程序没有崩溃,我在application:performFetchWithCompletionHandler:
实现中没有对后台线程做任何事情。
我认为下一步将是提出仍然会导致问题的最小测试用例。因此,使用Xcode 6.1,我创建了一个空白的单视图应用程序(Swift)。然后我做了少量的工作来添加后台提取:
更新了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中的某种错误。有没有人见过这种情况?它有解决方法吗?