2016-08-08 2 views
0

나는 N 초마다 오디오 파일을 x 초마다 재생하려고합니다. 오디오 파일은 지속적으로 실행중인 프로세스와 동기화되어 있기 때문에 NSTimer의 간격은 (내 지식)가 될 수있는 가장 짧은 :배경으로 전환 할 때 NSTimer가 신뢰할 수 없음

self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(updateTimerFired:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:self.updateTimer forMode:NSRunLoopCommonModes]; 

내 문제가 백그라운드 상태로 전환하는 동안 발생하는 예를 들어, 사용자가 홈 버튼을 클릭하면 대기 시간이 타이머에서 발생하며 전환 중에 "updateTimerFired :"메서드가 안정적으로 호출되지 않습니다. 이로 인해 오디오 파일의 동기화가 끊어 지지만 결국 전환이 완료된 후에 오디오 파일이 동기화됩니다. 내 응용 프로그램에는 오디오 배경 모드가 포함되어 있습니다.

배경으로 전환 할 때 대기 시간이 발생하지 않도록 NSTimer 이외의 다른 도구가 있습니까? dispatch_source_create로 NSTimer 교체 종료까지

+0

지역 알림을 대신 사용 하시겠습니까? 나는 비슷한 문제에 대한 통과에서 그것을 사용했고, 내가 대기 시간에 문제가 있다는 것을 기억하지 못한다. 그리고 이것에 대한 배경 작업을 사용하고 있는가? – MCMatan

+0

@MCMatan 백그라운드 작업을 구현하려고 시도했지만 대기 시간이 계속 발생했습니다. 나는 지역 통보를 고려하지 않았다. 나는 그것들을 들여다 볼 것이고 내가하려고하는 것에 그들이 일할 것인지를 볼 것입니다. – hgwhittle

+0

좋아, 아마도 당신에게 잘 어울리는 현지 알림을 확인해야합니다. 또한, 백그라운드 작업을위한 델타 차이가있는 NSTimer를 다시 작성하고 있습니까? 아니면 같은 것을 사용하고 있습니까? – MCMatan

답변

1

:

self.timerQueue = dispatch_queue_create("updateTimerQueue", nil); 
self.updateTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self.timerQueue); 
dispatch_source_set_timer(self.updateTimer, DISPATCH_TIME_NOW, (1 * NSEC_PER_SEC)/50, (1 * NSEC_PER_SEC)/20); 

dispatch_source_set_event_handler(self.updateTimer, ^{ 
    [self updateTimerFired]; 
}); 
dispatch_resume(self.updateTimer); 

이에서 수행 타이머위한 전용 큐를 제공하며, 배경의 전환에 의해 중단되지 않는다.