在哪里实例化 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 之前完成其初始化。