Iphone:运行到后台时应用程序会冻结吗?

时间:2011-09-28 01:16:57

标签: iphone asynchronous upload background

我有一个使用NSUrlConnection将文件上传到服务器的应用程序。它被放置在ViewDidLoad方法上。它在应用程序处于前台时上传到服务器。在我异步调用NSUrlConnection之前,我在应用程序目录中创建临时文件。

在上传文件时,我点击了iPhone按钮,以便应用程序在后台运行。首先我认为应用程序冻结了上传,但事实并非如此。该文件在此期间仍在上传。

这是否意味着应用程序仍然在后台运行正常,直到剩余时间结束,然后应用程序退出?

1 个答案:

答案 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;
    });
}