Принудительно закрыть приложение и запустить его в фоновом режиме

У нас есть приложение, которое имеет определенную цель, где требуется выход. После выхода процесс должен запускаться в фоновом режиме в течение определенного периода времени или до его завершения. Нам просто нужно знать, как программно заставить приложение перейти в фоновый режим, где процессы могут продолжаться. Любая помощь в этом была бы отличной! Заранее спасибо!

ОБНОВЛЕНИЕ: Мы подтвердили, что не существует программного способа заставить приложение выйти / войти в фоновый режим и продолжить выполнение фоновых задач. Вы можете принудительно закрыть приложение, используя exit(0); но это убивает приложение все вместе. Однако основная часть этого вопроса касалась выполнения задач в фоновом режиме. Мы нашли решение, которое позволяет нашему приложению начать обработку данных и выполнение задач, которые пользователь должен настроить для обработки. Вот код, необходимый. Это должно быть добавлено к делегату приложения, и многозадачность требуется на устройстве / IOS.

- (void)applicationDidEnterBackground:(UIApplication *)app{
    // Check that IOS supports multitasking
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){
        // Check that the device supports multitasking
        if ([[UIDevice currentDevice] isMultitaskingSupported]) {
        // Custom setting to allow users the freedom to enable or disable background tasks
        BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"backgroundTasksEnabled_key"];
            if ( enabled ){
                //Get the shared application instance
                backGroundApp = [UIApplication sharedApplication];  
                background_task = [backGroundApp beginBackgroundTaskWithExpirationHandler: ^ {
                    [backGroundApp endBackgroundTask: background_task];
                    background_task = UIBackgroundTaskInvalid;
                }];

                // Run in background
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                    NSLog(@"\n\nProcess background tasks!\n\n");

                    // Do your work here

                });
            }
        }
    }
}

3 ответа

Решение

Вы можете перевести приложение iOS в фоновый режим, отправив зарегистрированный URL-адрес другому приложению, например URL-адресу веб-сайта, в Safari.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: myWebsiteURL ]];

Многие приложения, которые вызывают Safari для обработки URL-адресов, одобрены Apple.

Чтобы получить какое-либо время в фоновом режиме, приложение должно быть соответствующим образом настроено с использованием одного из разрешенных фоновых режимов (аудио, местоположение или VOIP); или приложение может запросить несколько минут дополнительного времени в фоновом режиме, а затем приостановить, вызвав метод beginBackgroundTaskWithExpirationHandler.

У вас не может быть процесса, выполняющего (выполняющего работу) в фоновом режиме в iOS, у вас есть несколько секунд, когда приложение завершает какую-либо очистку, и все!

Вы не можете заставить приложение в фоновом режиме, я уверен, что руководящие принципы Apple запрещают вам делать это. Что может делать ваше приложение, которое оно может делать только в фоновом режиме, а не на переднем плане?

Другие вопросы по тегам