AVAudioPlayer를 사용하여 레코드를 재생하고 있습니다. 각 재생 세션 사이에는 0 ~ 10 초 간격이 있습니다. 내가 AVAudioPlayerDelegate을 사용하고이 간격을 만들려면 및 완료 연주 할 때 나는 지연 후 새로운 재생을 시작 해요 :앱이 백그라운드/비활성 상태 인 경우 GCD`asyncAfter`이 시작되지 않습니다.
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
guard let session = playbackSessionId,
let audioTrack = audioTrack,
let failureHandler = playingFailure,
let successHandler = playingSuccess else {
playingFinished(flag, error: nil)
return
}
print("audioPlayerDidFinishPlaying fired")
DispatchQueue.global(qos: .utility).asyncAfter(deadline: .now() + LoopInterval.currentInterval) { [weak self] in
print("asyncAfter fired")
guard let strongSelf = self,
let currentSession = strongSelf.playbackSessionId, session == currentSession else { return }
strongSelf.startPlayingRecordInLoop(audioTrack, success: successHandler, failure: failureHandler)
}
}
앱이 배경 (
home
버튼),
audioPlayerDidFinishPlaying
화재로 이동 한 후
하지만 DispatchQueue.global(qos: .utility).asyncAfter
을하지. ,
audioPlayerDidFinishPlaying fired
asyncAfter
화재가 난 다음 로그 메시지가 표시됩니다 : 그래서 콘솔에서 나는 볼 응용 프로그램이 활성화되면
가
asyncAfter fired
이 모든 일이 예상대로.