UI 更新期间 AVSpeechSynthesizer 卡顿
AVSpeechSynthesizer stutter during UI update
当 AVSpeechSynthesizer
正在说一个句子时,UI 正在发生变化(例如 ViewController
被推送,UIButton
的标题已更改,...),AVSpeechSynthesizer
是卡顿的。
我所有的 UI 更改都在 dispatch_async
块中。我必须这样做,否则 UI 无法正确更新。
dispatch_async(dispatch_get_main_queue(), ^{
[self.aButton setTitle:@"title" forState:UIControlStateNormal];
});
我已经在主线程和后台线程上运行 speakUtterance
试过了,但是没关系,一直卡顿。
如果在 speakUtterance
期间没有 UI 变化,则完全没有问题。
这是 AVSpeechSynthesizer
中的错误吗?我是否遗漏了有关线程的内容?
好的,我知道发生了什么事了。
调用AVSpeechSynthesizer
的函数每次都执行这段代码:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionDuckOthers
error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
事实证明这完全没有必要,并且会导致 AVSpeechSynthesizer
.
出现打嗝和口吃
所以这毕竟与演讲期间做 UI 无关。
当 AVSpeechSynthesizer
正在说一个句子时,UI 正在发生变化(例如 ViewController
被推送,UIButton
的标题已更改,...),AVSpeechSynthesizer
是卡顿的。
我所有的 UI 更改都在 dispatch_async
块中。我必须这样做,否则 UI 无法正确更新。
dispatch_async(dispatch_get_main_queue(), ^{
[self.aButton setTitle:@"title" forState:UIControlStateNormal];
});
我已经在主线程和后台线程上运行 speakUtterance
试过了,但是没关系,一直卡顿。
如果在 speakUtterance
期间没有 UI 变化,则完全没有问题。
这是 AVSpeechSynthesizer
中的错误吗?我是否遗漏了有关线程的内容?
好的,我知道发生了什么事了。
调用AVSpeechSynthesizer
的函数每次都执行这段代码:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionDuckOthers
error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
事实证明这完全没有必要,并且会导致 AVSpeechSynthesizer
.
所以这毕竟与演讲期间做 UI 无关。