Я разрабатываю приложение, которое работает в фоновом режиме. Иногда мне нужно сказать пользователю, что что-то происходит, поэтому я играю звук определенное количество раз. Для этого я сделал таймер, но проблема в том, что он не может превышать 10 с общего времени задержки, после чего больше нет звуков (но приложение все еще работает). Я проверил это поведение в режиме переднего плана, и он отлично работает.dispatch_after ограничен 10 секундами?
Это мой код, когда я должен сообщить пользователю:
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
numAlarm = 1;
NSTimeInterval delay_in_seconds = 2.0;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
и "fiBGTemps" это что-то вроде этого,
- (void)fiBGTemps:(int)sender
{
switch (sender){
case TEMP_SCAN:
(…)
break;
case ALARM:
if (numAlarm>0 && numAlarm<NUM_ALARM)
{
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
NSTimeInterval delay_in_seconds = 2;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
numAlarm++;
}
break;
}
}
Это поведение нормально? Я что-то упускаю?
Благодаря
Kanick
Что установлено NUM_ALARM? Возможно, это ограничение числа циклов. Кроме того, кажется, что у вас есть последовательность из двух вторых задержек, а не задержка в 10 секунд. – aLevelOfIndirection
Привет @aLevelOfIndirection, NUM_ALARM - это константа, которую я установил для проверки этого временного ограничения (#define NUM_ALARM 20). Таким образом, я вижу, сколько раз звучит звук. Другой способ, который я тестировал, - изменить значение «delay_in_seconds». Если я установил это значение 8 (например), он воспроизводит только 2 звука. Если я установил это значение в 12 (более 10), он воспроизводит только один звук. – Kanick