一旦应用程序从终止/挂起状态唤醒,就触发 3 个同步 API
Fire 3 synchronous APIs once application wakes up from killed/ suspended state
Geo-Fencing 委托方法 didExitRegion 和 didEnterRegion 适用于所有应用程序状态(前景/背景/暂停和终止状态)。一旦通过任何区域,应用程序需要同步命中 3 个相互依赖的 api。在前台状态下一切正常,但在暂停/终止状态下不正常。不知道这次失败的确切原因。
在这种情况下(终止/暂停状态)执行所有任务的唤醒时间限制可能是一个原因。我尝试了 beginBackgroundTaskWithExpirationHandler ,但它没有帮助我。
- (void) beginBackgroundUpdateTask{
_backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
}
- (void) endBackgroundUpdateTask{
[[UIApplication sharedApplication] endBackgroundTask:_backgroundTask];
_backgroundTask = UIBackgroundTaskInvalid;
}
- (void)locationManager:(CLLocationManager *)manager
didEnterRegion:(nonnull CLRegion *)region
{
[kSharedAppDelegate beginBackgroundUpdateTask];
NSString *locId = [region.identifier substringFromIndex:1];
Recipe *recipe = [Recipe getSelectedReturnRecipeForLocationId:locId];
if(recipe)
{
[self callAPIOne:^(NSDictionary *dictResponse) {
[self callAPITwo:params forAbc:NO];
} withFailed:^(NSDictionary *dictResponse) {
[kSharedAppDelegate endBackgroundUpdateTask];
} showLoader:NO];
}
else
[kSharedAppDelegate endBackgroundUpdateTask];
}
如果有人对我在这里做错了什么有任何建议,请帮忙。提前致谢
我自己发布这个答案,只是为了清楚 以上代码足以完成此类任务。使用上面的代码,所有需要的任务都在所有应用程序状态下工作(foreground/background/killed/suspended)。
我的问题出在核心数据实现上。一旦配方对象变成零,我就跳过了更多的代码。这让我觉得 API 没有触发,因为处于终止状态的时间限制有限。
希望以上代码可以帮助其他人解决同样的问题。
Geo-Fencing 委托方法 didExitRegion 和 didEnterRegion 适用于所有应用程序状态(前景/背景/暂停和终止状态)。一旦通过任何区域,应用程序需要同步命中 3 个相互依赖的 api。在前台状态下一切正常,但在暂停/终止状态下不正常。不知道这次失败的确切原因。
在这种情况下(终止/暂停状态)执行所有任务的唤醒时间限制可能是一个原因。我尝试了 beginBackgroundTaskWithExpirationHandler ,但它没有帮助我。
- (void) beginBackgroundUpdateTask{
_backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
}
- (void) endBackgroundUpdateTask{
[[UIApplication sharedApplication] endBackgroundTask:_backgroundTask];
_backgroundTask = UIBackgroundTaskInvalid;
}
- (void)locationManager:(CLLocationManager *)manager
didEnterRegion:(nonnull CLRegion *)region
{
[kSharedAppDelegate beginBackgroundUpdateTask];
NSString *locId = [region.identifier substringFromIndex:1];
Recipe *recipe = [Recipe getSelectedReturnRecipeForLocationId:locId];
if(recipe)
{
[self callAPIOne:^(NSDictionary *dictResponse) {
[self callAPITwo:params forAbc:NO];
} withFailed:^(NSDictionary *dictResponse) {
[kSharedAppDelegate endBackgroundUpdateTask];
} showLoader:NO];
}
else
[kSharedAppDelegate endBackgroundUpdateTask];
}
如果有人对我在这里做错了什么有任何建议,请帮忙。提前致谢
我自己发布这个答案,只是为了清楚 以上代码足以完成此类任务。使用上面的代码,所有需要的任务都在所有应用程序状态下工作(foreground/background/killed/suspended)。
我的问题出在核心数据实现上。一旦配方对象变成零,我就跳过了更多的代码。这让我觉得 API 没有触发,因为处于终止状态的时间限制有限。
希望以上代码可以帮助其他人解决同样的问题。