从 iOS 8 开始,我的两个应用程序都出现了同样的问题。在 iOS 7 中,后台刷新触发相当可靠。在 iOS 8 中,它刚刚停止。如果我将任一应用程序从 xcode 启动到后台获取模式,一切都会正常运行。背景刷新自己刚刚停止在 iOS 中自行触发。我有一个充满希望的理论,我现在正在尝试。这是我的想法...
如果用户从多任务屏幕中强制将您的应用程序杀死,iOS 将从后台刷新中排除您的应用程序。Apple 是如何实现这种行为的?一种方法是将最小获取间隔设置为 UIApplicationBackgroundFetchIntervalNever。十分简单。让我们假设他们就是这样做的。您的应用程序是在每次启动时设置最小获取间隔,还是仅在初始启动时设置?
就我而言,我只是将最小获取间隔设置为我的应用程序初始设置的一部分。如果用户强行杀死了应用程序,而 iOS 实际上将最小获取间隔设置为 UIApplicationBackgroundFetchIntervalNever,那么我的应用程序就会卡在从不的状态。我在我的一个应用程序中做了一个小改动,以便在每次启动时设置最小获取间隔。到目前为止,一切都很好。
更新:
在我的后台获取土地上一切都很好。
我目前正在开发的应用程序和我在应用程序商店中的应用程序都再次可靠地触发后台获取。
执行此操作的代码可能非常简单......
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:minimumBackgroundFetchInterval];
每次启动应用程序时调用它都可以解决问题,但是,您需要考虑设置该值是否适合应用程序的当前状态。就我而言,我的一个应用程序是音乐会列表应用程序。如果用户还没有选择音乐会的地点,那么设置最小后台获取间隔是没有意义的。我有一个 NSUserDefault 来跟踪是否已设置位置。这是我用于设置获取间隔的代码的近似值...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([INCUserDefaults isLocationConfigured]) {
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:kSecondsIntervalForUpcomingShowsBackgroundFetch];
}
return YES;
}
在我发布错误修复之前,我只是将最小后台获取间隔设置为设置过程的一部分。现在我在设置过程中设置它,如果设置过程之前完成,则在应用程序启动时设置它。