Objective-c Не останавливаться при входе в фоновом режиме - PullRequest
1 голос
/ 30 августа 2011

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

EDIT:

Я последовал этому примеру http://evilrockhopper.com/2010/01/iphone-development-keeping-the-ui-responsive-and-a-background-thread-pattern/

Я вызвал таймер внутри, но он не вызывается, когда я вхожу в фоновый режим:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    if(self.viewController.timerquest != NULL)
    {
        if(self.viewController.timerquest.timerRunning){
            // Save varibales
            [self performSelectorInBackground:@selector(performLongTaskInBackground) withObject:nil];
        }
    }
}



- (void) performLongTaskInBackground
{
    // Set up a pool for the background task.
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // perform some long task here, say fetching some data over the web.
    //...
    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];

    // Always update the components back on the main UI thread.
    [self performSelectorOnMainThread:@selector(completeLongRunningTask) withObject:nil waitUntilDone:YES];

    [pool release];
}

-(void) updateTimer{

    // Update my timer. This method is not being called in background mode
}

Что мне делать?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 30 августа 2011

использование Длительные фоновые задачи в соответствии с руководством: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

1 голос
/ 30 августа 2011

В зависимости от того, что происходит при срабатывании таймеров, вы можете настроить локальное уведомление , которое будет срабатывать одновременно с таймером; это полезно, когда таймер предоставит пользователю что-то для действия. Что касается сохранения переменных, вы захотите использовать -applicationDidEnterBackground: чтобы сохранить любое нужное вам состояние, чтобы можно было загружать / генерировать правильные переменные при повторном запуске приложения (что может не произойти, пока приложение не будет завершено и полностью перезапущен снова).

Типы задач, которым разрешено выполнять длительные фоновые задачи, довольно ограничены, особенно для таких вещей, как GPS и воспроизведение звука. Все остальное необходимо решить для каждой задачи в отдельности, следует ли имитировать продолжение работы (например, переключение таймера на локальное уведомление), приостановку и сохранение необходимого состояния для продолжения при следующем запуске приложения, просто отменив задачу и изящный перезапуск / уведомление пользователя о возобновлении работы приложения или запрос конечного промежутка времени для завершения задачи (для таких вещей, как завершение загрузки).

1 голос
/ 30 августа 2011

Не могли бы вы заменить таймер с отложенными фоновыми уведомлениями?

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