我正在使用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
當應用程序被激活,所有的作品如預期。