我一直在尝试在我的应用程序中实现一个后台线程,以便进行长时间的移植上传。
我正在使用FBConnect SDK并且它一直运行良好,但我希望保持GUI端的顺利运行,此时应用程序在开始上传之前会有明显的停顿。
目前发生的事情是我将上传作业添加到队列中,然后运行“startQueue”。
这将从队列中取出第一份作业,调整图像大小并开始上传到Facebook。
只有在发出URL请求时,它才开始在自己的线程中运行,然后我才能恢复对GUI的控制。
我想要的是能够将作业添加到队列中,然后在单独的线程中运行“startQueue”。这会立即让我重新控制GUI。
正在发生的事情是我立即取回GUI并在新线程中调整图像大小)并开始Facebook上传(也在新线程中),但之后什么都没有。
对于这个子线程中可以做什么和不可以做什么有什么限制吗?是否不允许URL连接?手机上似乎没有任何错误,我可以继续向队列中添加作业,但没有问题,但初始上传没有完成。
init方法创建线程......
bgThread = [[NSThread alloc] initWithTarget:self selector:@selector(startQueue) object:nil];
然后添加作业方法启动它......
[bgThread start];
然后这样运行......
-(void)startQueue
{
running = TRUE;
bgPool = [[NSAutoreleasePool alloc] init];
[self startJob];
}
-(void)startJob
{
NSDictionary *currentJob = [NSDictionary dictionaryWithDictionary:[jobQueue objectAtIndex:0]];
NSArray *networks = [currentJob objectForKey:@"networks"];
NSLog(@"Resizing image");
NSLog(@"Starting Uploads");
for (int i = 0; i < [networks count]; i++)
{
NSString *networkName = [networks objectAtIndex:i];
if ([networkName isEqualToString:@"Facebook"])
{
NSLog(@"Facebook");
currentUploads += 1;
[self.fbDelegate uploadPhoto:uploadImage withCaption:[currentJob objectForKey:@"caption"]];
}
}
}
不使用线程(即只运行startJob)它完全可以正常工作。当我调用bgThread启动它运行完美时,我得到了Facebook NSLog但是工作永远不会完成。它甚至没有完成错误。
感谢您提供的任何指示或提示!
奥利弗