我一直在尝试在我的应用程序中实现一个后台线程来执行长途、硬移植上传的东西。
我正在使用 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 start 时,它运行完美,我得到了 Facebook NSLog,但工作永远不会完成。它甚至没有以错误结束。
感谢您提供的任何指示或提示!
奥利弗