我目前在所有活动中使用文本到语音,每个活动都有一个TextToSpeech
对象(创建活动时创建,活动销毁时关闭)。
使用谷歌的语音合成引擎,第一次加载非常缓慢(10-15s),但随着次要活动它是瞬间的,可能是因为TTS引擎已经初始化,我没有'我知道。问题是,当我打开一个活动并清除活动堆栈(使用intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
)时,TTS初始化再次变慢(可能是因为清除堆栈会破坏所有TTS对象并释放引擎)。
因此,我想出了在我的自定义TextToSpeech
课程中移动Application
实例,并将其设为静态"单身&#34 ;,这将使用初始化的第一个活动的上下文。然后它将被共享并用于我的所有活动。
我看到两个问题:首先,除非应用程序进程被杀死,否则TTS引擎永远不会被销毁(我猜?)。其次,我被告知永远不要对Context
提出静态引用,我明白为什么。但是,例如,Acapela TTS SDK只能使用上下文实例化一次(如果您尝试在多个活动中创建多个TTS对象,之前的那些将不再起作用),因此必须在活动之间共享。 Android TTS可能相同吗?
那我该怎么办?在我的TextToSpeech
课程中放置静态Application
是否安全?或者我应该去berzerk并使用TTS实例创建一个粘性服务吗?