2017-03-29 3 views
2

내 앱은 백그라운드에서 실행되며 NSTimer를 사용하여 일정 시간 후에 오디오를 실행합니다. 나와 내 테스터는이 문제에 아무런 문제가 없으며 백그라운드에서 몇 시간 후에 오디오를 시작할 수 있습니다 (> 10 시간).배경 모드에서 NSTimer를 지연시킬 수있는 이유는 무엇입니까?

제 문제는 오디오가 종종 때로는 몇 분, 때로는 1 시간 지연되는 것으로보고하는 것입니다.

내가 그런 일을 할 수는 :

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]; 
    }); 

내 질문

은 다음과 같습니다

-Does

는 NSTimer는 시스템에 의해 그 정도 지연 될 수 있습니까? 그렇다면이 문제를 해결하는 방법은 무엇입니까? - 이런 종류의 문제를 재현하는 방법은 무엇입니까? - 다음을 사용하는 것이 더 안전합니까?

theTimer = [[NSTimer alloc] initWithFireDate:theDateIWant interval:0.0 target:self selector:@selector(playAudio) userInfo:nil repeats:NO]; 
[[NSRunLoop mainRunLoop] addTimer:theTimer 
          forMode:NSDefaultRunLoopMode]; 

어떤 도움을 주셔서 감사합니다!

+0

어떤 배경 모드를 사용합니까? –

+0

백그라운드 오디오를 사용하고 내 코드의 다른 부분을 사용하여 백그라운드 실행 시간을 충분히 늘릴 수 있습니다. – OthmanT

답변

1

백그라운드 작업을 조금 잘못 이해 한 것 같습니다. 첫 번째 조각은 (난 당신이 applicationDidEnterBackground 방법에 배치한다고 가정)을 수행하면

, 그것은 내가 을 완료까지 내가 수행 할 수있는 작은 작업을

가, 잠시 기다려주십시오 시스템을 말한다 그것!

시스템은 응용 프로그램을 일시 중단하기 전에 약 5-10 분 동안 대기합니다.

알람 종류가 필요한 경우 LocalNotification을 사용하여 지정된 시간에 특정 사운드를 재생할 수 있습니다.

+0

답변을 주셔서 감사하지만 말했듯이 내 시스템은 이미 작동하고 사용자는 오디오 모드를 사용하여 오디오 이벤트를 듣기를 기대합니다. 이미 보조 시스템으로 알림을 사용하고 있습니다. 지연에 대해 더 염려합니다 – OthmanT

+0

사실 현재 iOS 버전의 시간 제한은 정확히 3 분입니다. – Sulthan

+0

네,하지만 매 2 분마다 오디오를 재생하는 루프로 돌아 다니며 - 저에게 새로운 3 분간의 운행 시간을줍니다. – OthmanT

관련 문제