我的应用程序使用后台提取每 30 分钟发送和上传一小部分数据。将应用程序从前台运行最小化后,该服务可以正常工作大约 10 - 14 小时 - 应用程序每 30 分钟正确发送和接收一次数据。
有谁知道几个小时后该服务会发生什么情况? iOS 系统是否会自动终止应用程序,从而导致后台提取停止工作?
谁能解释一下吗?
最佳答案
iOS 提供了 30 秒的时间范围,以便应用程序被唤醒、获取新数据、更新其界面,然后再次返回 sleep 状态。您有责任确保任何已执行的任务都能在这 30 秒内完成,否则系统会突然停止它们。
也许互联网速度很慢,您的应用程序花费了超过 30 秒并且系统停止了您的应用程序。
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSDate *fetchStart = [NSDate date];
// Make your process here
[viewController fetchNewDataWithCompletionHandler:^(UIBackgroundFetchResult result) {
completionHandler(result);
NSDate *fetchEnd = [NSDate date];
NSTimeInterval timeElapsed = [fetchEnd timeIntervalSinceDate:fetchStart];
NSLog(@"Background Fetch Duration: %f seconds", timeElapsed);
}];
}
Apple 还提供了一种算法,该算法根据您自己对应用程序的使用情况来定义后台提取应触发的频率。如果你经常使用它,那么它会尽可能频繁地获取,但如果你每天下午 4 点使用,后台获取应该在之前触发,这样你的数据就会在你启动它时更新。
关于ios - 后台提取在大约 10 到 14 小时后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32298681/