Iphone: приложение зависает при запуске в фоновом режиме? - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть приложение, которое загружает файл на сервер, используя NSUrlConnection.Он был помещен в метод ViewDidLoad.Он загрузил на сервер, когда приложение находится на переднем плане.Прежде чем я вызываю NSUrlConnection асинхронно, я создаю временный файл в каталоге приложения.

Во время загрузки файлов я нажал на кнопку iPhone, чтобы приложение работало в фоновом режиме.Сначала я подумал, что приложение замораживает загрузку, но это не так.Файл все еще загружается в течение этого времени.

Означает ли это, что приложение по-прежнему нормально работает в фоновом режиме до тех пор, пока оставшееся время не закончится, а затем приложение закроется?

1 Ответ

1 голос
/ 28 сентября 2011

После нажатия кнопки «Домой» каждое приложение работает в фоновом режиме в течение определенного периода времени (обычно несколько секунд), прежде чем оно перейдет в режим ожидания. Если вам необходимо выполнить задачу (в случае загрузки файла вашего дела) перед переходом в режим ожидания, вы можете использовать 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;
    });
}
...