相关疑难解决方法(0)

START_STICKY和START_NOT_STICKY

是什么区别START_STICKY,并START_NOT_STICKY同时在android系统实现服务?有谁可以指出一些标准的例子..?

android android-service

252
推荐指数
4
解决办法
16万
查看次数

在工作线程上初始化TextToSpeech对象

多年来(从字面上看),我的应用程序遭遇了性能不佳的文本到语音引擎的困境,特别是调用时的初始化时间:

tts = new TextToSpeech(context, myOnInitListener);
Run Code Online (Sandbox Code Playgroud)

以上可能导致UI滞后,如果您在SO上搜索"文本到语音初始化缓慢",您会发现很多帖子.嵌入式高品质IVONA声音曾经是最糟糕的罪魁祸首,但Google TTS引擎现已获此殊荣.

他们最近的APK更新导致初始化时出现严重滞后 - 无需测试此代码,您可以转到Android文本到语音设置并尝试在可用引擎之间切换,同时按"收听样本",显示延迟很好".

为了尝试解决这个问题,我实施了以下内容:

private volatile TextToSpeech tts;

AsyncTask.execute(new Runnable() {
    @Override
    public void run() {
        tts = new TextToSpeech(context, volatileOnInitListener);
    }
});
Run Code Online (Sandbox Code Playgroud)

这完全解决了初始化的滞后问题,但我担心这可能会产生副作用,我没有考虑过?任何人都可以想到吗?

我也很困惑,因为我相信TextToSpeech构造函数是异步的,因此将此构造函数移动到工作线程应该没有区别?如果这种实现是前进的方向,那么Google为什么不在TextToSpeechSettings中实现它呢?

希望有人能澄清以上内容.提前致谢.

编辑 - 当我说"构造函数是异步的"时,我真的指的是它启动的引擎初始化过程,以及最终调用onInit

java android text-to-speech google-text-to-speech

8
推荐指数
1
解决办法
975
查看次数