无法仅在speaker()请求中实例化文本到语音

时间:2014-06-25 07:36:36

标签: android optimization text-to-speech

我正在尝试在可能长时间运行的服务中实现TextToSpeech,所以我想在非常必要的情况下实例化TTS,以节省内存/电池。

有没有办法实现这个处理多个speak()请求?

例如,应用程序需要使用TTS:TTS被实例化并初始化,一旦准备就绪,然后处理并最终关闭()。但是如果TTS已经在讲话(或实例化)并且应用程序需要另一个文本合成,我希望这个调用可以通过仍然活着的TTS实例而不是新的TTS实例来处理(为了获得刷新能力)。

有没有一种干净而实用的方法来实现这个目标?

非常感谢你。

ADDENDUM:您认为这种创建和销毁解决方案是否真的有助于节省电池,还是应该将TTS留在内存中并让Android系统管理所有内容?

1 个答案:

答案 0 :(得分:1)

我会使用Singleton / Queue Combination来实现它。

如果发出了一个Text-To-Speak命令,那么你将请求排队(简单地使用Java中的ConcurrentQueue和来自自行设计的类的一些自定义请求对象)然后如果第二个Thread没有运行则启动它,否则它是通知。

第二个线程实例化TTS,轮询队列中的第一个项目并对其进行处理。然后它会再次检查队列,如果队列为空,它将关闭TTS并退出,否则它将处理队列中的下一个元素。

您可以选择添加超时,因此在关闭之前,线程将在最后一个TTS请求之后等待X秒。