我有一个使用NSUrlConnection将文件上传到服务器的应用程序。它被放置在ViewDidLoad方法上。它在应用程序处于前台时上传到服务器。在我异步调用NSUrlConnection之前,我在应用程序目录中创建临时文件。
在上传文件时,我点击了iPhone按钮,以便应用程序在后台运行。首先我认为应用程序冻结了上传,但事实并非如此。该文件在此期间仍在上传。
这是否意味着应用程序仍然在后台运行正常,直到剩余时间结束,然后应用程序退出?
答案 0 :(得分:1)
按下主页按钮后,每个应用程序在进入挂起模式之前在后台运行一段时间(通常为几秒钟)。如果您需要在进入暂停模式之前完成任务(在您的案例文件上传中),您可以使用Task completion API.
即使您使用的是任务完成API,也只会运行应用程序的一个线程,而不是整个应用程序。以下是apple推荐的代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task.
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}