2015-12-22 5 views
1

Я пытаюсь держать мое приложение IOS работает навсегда в фоновом режиме, (или выборки местоположения и диагностики о местоположении), и я нашел этот код -NSRunLoop для фоновой задачи действительного

[self.locationManager stopUpdatingLocation]; 
self.timer = [NSTimer scheduledTimerWithTimeInterval:self.currentTimerTime target:self selector:@selector(checkLocation) userInfo:nil repeats:NO]; 
[[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes]; 
[[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil]; 

Это работает большой но у меня такое чувство, что яблоку это не понравится, это лучшая практика?

ответ

0

Как вы, вероятно, обнаружили, что это работает в разработке, он не будет работать в производстве. Apps get beginBackgroundTaskWithExpirationHandler получают ограниченное количество времени для выполнения, неограниченное в разработке, но обычно 60 секунд в выпущенных приложениях, после чего вызывается обработчик срока действия (который вы не назначаете в своем примере кода), и ожидается, что ваше приложение закончится фоновая задача с использованием идентификатора, возвращаемого вызовом beginBackgroundTaskWithExpirationHandler (который вы не захватываете). В противном случае ваше приложение будет прекращено. Для получения дополнительной информации см. Этот связанный вопрос/ответ.

objective c - Proper use of beginBackgroundTaskWithExpirationHandler