我正在编写一个同步数据的iOS应用。我还需要在应用程序处于后台时运行同步服务。所以我在我上传数据的地方编写了这段代码。
- (void)startAsyncUpload {
UIApplication *thisApplication = [UIApplication sharedApplication];
if([thisApplication respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
bgTaskIdentifier_ = [thisApplication beginBackgroundTaskWithExpirationHandler:^(void)
{
[thisApplication endBackgroundTask:bgTaskIdentifier_];
bgTaskIdentifier_ = UIBackgroundTaskInvalid;
}];
}
[self multipartUpload];}
它工作正常并在后台运行。但我在这里遇到了问题。我正在上传一个视频文件,当我的后台时间到期时,处理程序被调用,它结束了任务。现在当我来到前台再次上传恢复,很好。但是现在当我再次进入后台时,它并没有恢复后台任务。
我知道为什么,主要是因为我之前结束了这项任务。但有没有办法再次恢复任务,比如再次为后台运行注册任务?
答案 0 :(得分:2)
你确定你第二次调用beginBackgroundTaskWithExpirationHandler吗?
为bgTaskIdentifier创建一个ivar / property,为BOOL isUploading创建一个ivar / property。然后你可以写一个像这样的方法
- (void)resumeOrStartAsyncLoad
{
if(!self.isUploading)
{
[self multipartUpload];
self.isUploading = TRUE;
}
if(self.isUploading && self.bgTaskIdentifier == UIBackgroundTaskInvalid)
{
UIApplication *thisApplication = [UIApplication sharedApplication];
self.bgTaskIdentifier = [thisApplication beginBackgroundTaskWithExpirationHandler:^(void) {
[thisApplication endBackgroundTask:bgTaskIdentifier_];
bgTaskIdentifier_ = UIBackgroundTaskInvalid;
}];
}
}