iOS-приложение, выполняющее задачи в фоновом режиме - PullRequest
25 голосов
/ 16 марта 2011

Мне было интересно, смогу ли я отправить несколько вызовов веб-службы, пока мое приложение находится в фоновом режиме.Как скайп делает это?Даже если я нажму кнопку «Домой», мой вызов остается подключенным.

Ответы [ 3 ]

34 голосов
/ 16 марта 2011

Основываясь на том, что заявили rckoenes, приложениям разрешается регистрировать фоновые задачи, которые должны быть выполнены после того, как пользователь нажмет кнопку «Домой».Для выполнения этих задач существует ограничение времени 10 или 15 минут.Опять же, вы можете зарегистрировать задачу для выполнения сразу после того, как пользователь попадет домой, это НЕ позволит вам выполнить код, скажем, через час после выхода из приложения.

UIApplication*    app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:task];
        task = 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.
        NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]);
        if (connectedToNetwork) {
            // do work son...
        }

        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    });

ОБНОВЛЕНИЕ: если ваше приложение поддерживает версииiOS, предшествующая iOs 4, также следует убедиться, что многозадачность поддерживается перед регистрацией фоновой задачи.Используйте что-то вроде:

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;
31 голосов
/ 04 августа 2012

Попробуйте это ... Отличный код для запуска приложения в фоновом режиме без ограничения по времени.(Я протестировал его для загрузки более 600 МБ данных из веб-сервиса.)

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication *app = [UIApplication sharedApplication];
    UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        [app endBackgroundTask:bgTask]; 
    }];
 }

Обновление ::

, вы можете найти больше информации о мультитаксинге вApple Doc Фоновое исполнение .

Пожалуйста, проверьте на устройстве.

2 голосов
/ 21 мая 2015

Это зависит от того, какое приложение вы пытаетесь закодировать. Skype зарегистрирован как приложение VoIP (приложение для длительного пользования), поэтому он может оставаться «запущенным», хотя и работает в фоновом режиме.

Apple разделяет приложения на три части:

  • Выполнение заданий конечной длины (вы можете запускать задания за ограниченное время)
  • Загрузка контента в фоновом режиме (вы можете загрузить контент, чтобы представить его пользователю, когда приложение снова станет активным)
  • Реализация долгосрочных задач (Это наиболее интересная категория фоновых приложений с некоторыми подкатегориями, которые разработчик должен определить для вашего приложения)

    • Приложения, которые воспроизводят звуковой контент для пользователя в фоновом режиме, например приложение музыкального проигрывателя
    • Приложения, которые записывают аудиоконтент в фоновом режиме
    • Приложения, которые постоянно информируют пользователей об их местонахождении, например приложение для навигации
    • Приложения, поддерживающие передачу голоса по Интернет-протоколу (VoIP) (SKYPE здесь)
    • Приложения, которые должны регулярно загружать и обрабатывать новый контент
    • Приложения, которые регулярно получают обновления от внешних аксессуаров

Итак, вам необходимо оценить, к какой категории относится ваше приложение и как работает ваша служба. Может быть, если вы отправляете в сервис какие-то мелочи, лучший способ - просто запросить дополнительное время для выполнения работы.

Более подробную информацию обо всем этом можно найти по этой ссылке:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...