在哪里实例化 TextToSpeech class?
Where to instantiate TextToSpeech class?
我正在使用 TextToSpeech class of android 但是当我 instantiate
它在一个方法中时 TTS doesnt work
但是如果我在有效的 onCreate()
方法中声明它。
(请注意,我的应用程序在这两种情况下都可以运行)
为什么会这样?
I have heard that it is a good practice to instantiate classes within
methods if no other methods are using it.
更新:
代码:
TextToSpeech t1;
public void speak(View v){
Log.i(TAG,"speak method");
t1=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
t1.setLanguage(Locale.UK);
}
}
});
t1.speak("I m speaking out dude",TextToSpeech.QUEUE_FLUSH,null);
}
创建 TextToSpeech 实例后,它初始化文本到语音引擎。这是一个异步操作。初始化完成后调用 OnInitListener(第二个参数)。根据初始化状态,状态可以是 TextToSpeech.SUCCESS 或 TextToSpeech.ERROR。
因为它是异步的,所以需要一些时间来完成它的操作。
所以,答案在这里,
当您在 onCreate 中创建实例时,引擎有时间在您调用 "speak(String str)" 之前进行初始化并且它可以工作。但是当您在方法本身内部创建实例时,TTS 引擎没有时间在 Speak 之前完成其初始化。
我正在使用 TextToSpeech class of android 但是当我 instantiate
它在一个方法中时 TTS doesnt work
但是如果我在有效的 onCreate()
方法中声明它。
(请注意,我的应用程序在这两种情况下都可以运行)
为什么会这样?
I have heard that it is a good practice to instantiate classes within methods if no other methods are using it.
更新:
代码:
TextToSpeech t1;
public void speak(View v){
Log.i(TAG,"speak method");
t1=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
t1.setLanguage(Locale.UK);
}
}
});
t1.speak("I m speaking out dude",TextToSpeech.QUEUE_FLUSH,null);
}
创建 TextToSpeech 实例后,它初始化文本到语音引擎。这是一个异步操作。初始化完成后调用 OnInitListener(第二个参数)。根据初始化状态,状态可以是 TextToSpeech.SUCCESS 或 TextToSpeech.ERROR。
因为它是异步的,所以需要一些时间来完成它的操作。
所以,答案在这里,
当您在 onCreate 中创建实例时,引擎有时间在您调用 "speak(String str)" 之前进行初始化并且它可以工作。但是当您在方法本身内部创建实例时,TTS 引擎没有时间在 Speak 之前完成其初始化。