我正在使用静默推送通知,并在推送通知到达设备时设法调用didReceiveRemoteNotification
。但是,当委托执行时,我无法执行我的代码。根据下面的代码,我能够观察到{"打印进度1"的NSLog
,但我无法看到"打印进度2"。
有人可以告知以下用法是否不准确?我试图在后台延长任务的时间。我尝试删除beginBackgroundTaskWithExpirationHeader
,但代码也不会执行。
-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result)) handler {
NSLog(@"Print progress 1");
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^ {
///..... Background thread codes....
NSLog(@"Print progress 2");
[app endBackgroundTask:bgTask];
handler(UIBackgroundFetchResultNoData);
}];
}
答案 0 :(得分:0)
你应该检查你的背景是否需要很长时间,也许应用程序在到达记录点"Print Progress 2"
之前被杀死了:
运行后台任务的应用有有限的时间 运行它们。 (你可以找出使用的时间有多少
backgroundTimeRemaining
财产。)如果你不打电话 在时间到期之前,每个任务endBackgroundTask:
,系统终止 应用
和/或应该正确调试并确保您的代码已执行:
如果您在调试后台任务代码时遇到问题,那么就是您 可能会尝试使用
beginBackgroundTaskWithName:expirationHandler:
方法而不是这个。该方法提供与以下相同的行为 这个,但允许您为任务指定调试器可见名称。