В настоящее время я пишу приложение, которое зависит от отслеживания местоположения и отправки данных о местоположении на сервер. Проблема, однако, в том, что она должна работать 24/7, и в настоящее время я испытываю случайные сбои, которые происходят каждые 2-3 дня. То, что я сделал, чтобы приложение выполнялось постоянно в фоновом режиме, я поставил NSTimer в метод beginBackgroundTaskWithExpirationHandler, используя метод applicationDidEnterBackground. Таймер выполняет каждую минуту и останавливает/запускает службу определения местоположения.
Код в основном выглядит следующим образом:
UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTaskId = 0;
bgTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 1 * 60.0 target: self selector: @selector(onTick) userInfo: nil repeats: YES];
[t fire];
if (bgTaskId != UIBackgroundTaskInvalid){
[app endBackgroundTask: bgTaskId];
bgTaskId = UIBackgroundTaskInvalid;
}
}];
Я использую GCDAsyncSockets для подключения, каждый вызов имеет время ожидания около 30 секунд.
У меня действительно нет идей, какова может быть причина возникновения сбоев?