Почему NSTimer можно отложить в фоновом режиме?
Мое приложение работает в фоновом режиме и использует NSTimer для запуска аудио через определенное время. У меня и моих тестеров нет проблем с этим, и аудио может быть запущено через несколько часов в фоновом режиме (>10 часов).
Моя проблема в том, что некоторые пользователи сообщают, что звук часто задерживается, иногда на несколько минут, иногда на час.
Я делаю что-то подобное:
UIApplication * app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:nil];
dispatch_async(dispatch_get_main_queue(), ^{
theTimer = [NSTimer scheduledTimerWithTimeInterval:[theDateIWant timeIntervalSinceNow] target:self selector:@selector(playAudio) userInfo:nil repeats:NO];
});
Мои вопросы:
-Не может ли система NSTimer задержать систему? если так, как обойти эту проблему? -Как воспроизвести подобные проблемы? - Безопаснее ли использовать следующее?
theTimer = [[NSTimer alloc] initWithFireDate:theDateIWant interval:0.0 target:self selector:@selector(playAudio) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:theTimer
forMode:NSDefaultRunLoopMode];
Спасибо за любую помощь!
1 ответ
Мне кажется, что вы немного неправильно понимаете фоновые задачи.
Когда выполняется первый фрагмент (я предполагаю, что вы помещаете его в applicationDidEnterBackground
метод), говорит система
У меня есть небольшая задача, пожалуйста, подождите немного, пока я ее не закончу!
и система будет ждать около 5-10 минут, прежде чем приостановить приложение.
Если вам нужен вид будильника, вы можете использовать LocalNotification для воспроизведения определенного звука в указанное время.