AVAudioPlayer初始化和播放耗时比较严重,会阻塞主线程
private func playVoice(fileURL: URL) {
Loggo.debug(log: "init1")
self.player = try? AVAudioPlayer.init(contentsOf: fileURL) //370ms
Loggo.debug(log: "init2")
self.player?.delegate = self
Loggo.debug(log: "prepareToPlay1")
self.player?.prepareToPlay() //70ms
Loggo.debug(log: "prepareToPlay2")
Loggo.debug(log: "duration1")
self.duration = self.player?.duration ?? 0
Loggo.debug(log: "duration2")
Loggo.debug(log: "play1")
self.play() //100ms
Loggo.debug(log: "play2")
}
一点播放要等差不多0.5秒才会播放,而且还卡主线程,坑啊,实在要用还是放子线程播放。
空工程差不多在120ms左右。
总结:
机型越差,或者播放前CPU占用率就已经很高,AVAudioPlayer从初始化到播放之间的耗时就越长。反之,越短。
所以放在子线程播放还是有必要的。
网友评论