IOS-在后台执行有限长度的任务
我正在编写一个iOS应用程序来同步数据。我需要同步服务运行时,应用程序是在后台以及。所以我在上传数据的地方写了这段代码IOS-在后台执行有限长度的任务,ios,objective-c,sync,background-process,multitasking,Ios,Objective C,Sync,Background Process,Multitasking,我正在编写一个iOS应用程序来同步数据。我需要同步服务运行时,应用程序是在后台以及。所以我在上传数据的地方写了这段代码 - (void)startAsyncUpload { UIApplication *thisApplication = [UIApplication sharedApplication]; if([thisApplication respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)])
- (void)startAsyncUpload {
UIApplication *thisApplication = [UIApplication sharedApplication];
if([thisApplication respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
bgTaskIdentifier_ = [thisApplication beginBackgroundTaskWithExpirationHandler:^(void)
{
[thisApplication endBackgroundTask:bgTaskIdentifier_];
bgTaskIdentifier_ = UIBackgroundTaskInvalid;
}];
}
[self multipartUpload];}
它工作正常,在后台运行。但我这里有个问题。我正在上传一个视频文件,当我的后台时间到期时,处理器被调用,任务结束。现在当我再次来到前台时,很好。但是现在当我再次进入后台时,它并没有恢复后台任务
我知道为什么,基本上是因为我之前完成了任务。但是有没有办法再次恢复任务,比如再次注册任务以便后台运行?您确定要第二次调用beginBackgroundTaskWithExpirationHandler:吗 为bgTaskIdentifier创建一个ivar/属性,为BOOL创建一个ivar/属性。然后你可以写一个这样的方法
- (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;
}];
}
}
您可以使用线程来实现它,我想是的……我不会再调用它了。我已经编辑了上面的代码。请参考。当我第二次调用它时,会发生上载操作吗?我不想发生这种事。我只需要注册,不需要第二次打电话上传。