2012-06-14 3 views
0

У меня есть тестовый код, который я использую, чтобы поддерживать мое приложение в фоновом режиме, которое хорошо работает на симуляторе iOS 5.1, но не ведет себя таким образом на самом устройстве.фоновая задача работает на iphone

Теперь я уже знаю требования, которые я должен соблюдать, , поэтому я установил «фоновые режимы» для voip и location.

В методе applicationDidEnterBackground моего делегата я звоню следующую функцию , который я называю «doBackgroundActivity()» запросить время для применения, чтобы завершить некоторые давно запущенной задачи в фоновом режиме:

-(void) threadedMethod{  
while(true){ 
    NSLog(@"looping");    
    [self showLocalNotification:@"This notification will come every 2 min. if the app is running in background. Close it!"];   
    [NSThread sleepForTimeInterval: (5)];  // 60 sec = 1 min 
} 

}

-(void) doBackgroundActivity{ 
     self->_backgroundTask = [ [UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
       [[UIApplication sharedApplication] endBackgroundTask: self->_backgroundTask]; 
       self->_backgroundTask = UIBackgroundTaskInvalid; 
      } 
     ]; 


     [self threadedMethod]; 



[[UIApplication sharedApplication] endBackgroundTask:self->_backgroundTask]; 
    self->_backgroundTask = UIBackgroundTaskInvalid; 
} 

Как вы видите, doBackgroundAcitivity() просто вызывает threadedMethod(), и все, что делает, запускает бесконечный цикл, который отправляет локальное уведомление каждые 5 секунд или около того.

Теперь в симуляторе, когда я запускаю это и сворачиваю приложение, я вижу уведомление каждые 5 секунд или около того. Приложение продолжает работать в фоновом режиме, даже когда я запускаю другие приложения, я вижу, что приложение отправляет уведомления.

Но этого не происходит на устройстве. Похоже, что ОС убивает приложение сразу после отправки первого уведомления, и я не вижу никаких последующих уведомлений, которые я ожидаю увидеть позже?

Есть ли что-то еще, что я должен сделать, чтобы приложение работало в фоновом режиме?

+0

Apple, скорее всего, отклонит вас, если вы на самом деле не используете voip и местоположение ... – kevboh

ответ

0

Если все, что вы ищете, представляет уведомление пользователю, когда ваше приложение закрыто, вы должны использовать UILocalNotifications.

Вы можете установить, когда уведомление должно срабатывать, а также следует ли повторять его или нет, а также время между повторами.

В качестве побочного примечания я бы не рекомендовал использовать sleep() в цикле для управления, когда код выполняется так, потому что он останавливает поток от чего-либо вообще, и плохо для любых других задач, которые хотели бы использовать этот поток. Вместо этого вы должны использовать NSTimers и другие способы управления временем выполнения кода.

+0

Спасибо за ваш ответ. Дело в том, что нам нужно подождать в фоновом режиме для приема входящих телефонных звонков. Не уверен, что я должен использовать NSTimer или Sleep(), или как я должен сохранить свое приложение в живых, не делая что-то в фоновом режиме .... – revolutionary

+0

О, хорошо, если вы хотите, чтобы ваше приложение работало в фоновом режиме в течение длительного периода времени, вам захочется посмотреть документацию для запуска приложений в фоновом режиме. Перейдите сюда: http://bit.ly/GGzDpw и, в частности, посмотрите раздел «Реализация долгосрочных фоновых задач» –

+0

Я предполагаю, что это сохранит мое приложение только на 10 минут, верно? Я хочу сохранить его дольше. – revolutionary

Смежные вопросы