我正在尝试在可能长时间运行的服务中实现TextToSpeech,所以我想在非常必要的情况下实例化TTS,以节省内存/电池。
有没有办法实现这个处理多个speak()请求?
例如,应用程序需要使用TTS:TTS被实例化并初始化,一旦准备就绪,然后处理并最终关闭()。但是如果TTS已经在讲话(或实例化)并且应用程序需要另一个文本合成,我希望这个调用可以通过仍然活着的TTS实例而不是新的TTS实例来处理(为了获得刷新能力)。
有没有一种干净而实用的方法来实现这个目标?
非常感谢你。
ADDENDUM:您认为这种创建和销毁解决方案是否真的有助于节省电池,还是应该将TTS留在内存中并让Android系统管理所有内容?
答案 0 :(得分:1)
我会使用Singleton / Queue Combination来实现它。
如果发出了一个Text-To-Speak命令,那么你将请求排队(简单地使用Java中的ConcurrentQueue和来自自行设计的类的一些自定义请求对象)然后如果第二个Thread没有运行则启动它,否则它是通知。
第二个线程实例化TTS,轮询队列中的第一个项目并对其进行处理。然后它会再次检查队列,如果队列为空,它将关闭TTS并退出,否则它将处理队列中的下一个元素。
您可以选择添加超时,因此在关闭之前,线程将在最后一个TTS请求之后等待X秒。