多年来(从字面上看),我的应用程序因文本到语音引擎性能不佳而陷入困境,特别是调用时的初始化时间:
tts = new TextToSpeech(context, myOnInitListener);
以上可能会导致 UI 滞后,如果您在 SO 上搜索“文本到语音初始化缓慢”,您会发现很多帖子。嵌入的高品质 IVONA 语音曾经是最糟糕的罪魁祸首,但现在谷歌 TTS 引擎获得了大奖。
他们最近的 APK 更新导致初始化出现严重滞后 - 无需代码来测试这一点,您可以转到 Android 文本到语音设置并尝试在可用引擎之间切换,同时按下“收听示例”,显示滞后'很好'。
为了尝试解决这个问题,我实现了以下内容:
private volatile TextToSpeech tts;
AsyncTask.execute(new Runnable() {
@Override
public void run() {
tts = new TextToSpeech(context, volatileOnInitListener);
}
});
这已经完全治愈了初始化的滞后,但我担心这可能会产生我没有考虑过的副作用?有人能想到吗?
我也很困惑,因为我相信TextToSpeech 构造函数是异步的,因此将这个构造函数移动到工作线程应该没有什么区别吗?如果这个实现是前进的方向,那么谷歌为什么不在他们的TextToSpeechSettings中实现它呢?
希望有人能澄清上述情况。提前致谢。
编辑- 当我说“构造函数是异步的”时,我真的指的是它启动的引擎初始化过程,以及对 onInit 的最终调用