【问题标题】:TTS leaked service connection that was orignially bound hereTTS 泄露了原本绑定在这里的服务连接
【发布时间】:2013-08-14 06:30:58
【问题描述】:

我正在构建一个包含 tts 部分的应用程序,在主要活动中我正在创建一个类似 tts 的实例

public class Translator extends Activity implements OnClickListener{
TextToSpeech tts;
ArrayList<TTS.resultData> textsToBeSpoken = new ArrayList<TTS.resultData>();
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_translator);
        initTTS();//calling to initialise tts;
    }
}

我正在从 onCreate() 方法调用 initTTS() 方法;

public void initTTS(){
    tts = new TextToSpeech(Translator.this, new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            toast("TTS ready to use");
            tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {

                @Override
                public void onStart(String utteranceId) {
                    log("Started speaking");
                }

                @Override
                public void onError(String utteranceId) {
                    log("Error in processing Text to speech");
                }

                @Override
                public void onDone(String utteranceId) {
                    log("Text to speech finished previewing");
                }

            });
        }
    });
}

还有一个叫做

的函数
public void speakUpSon(){
    HashMap<String, String> params = new HashMap<String, String>();

    if(textsToBeSpoken.size() > 0){
        for(int i = 0; i < textsToBeSpoken.size(); i++){
            if(getCanProceedSpeaking()){
                int index = i;
                params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "finished Speaking of index : " + i);
                System.out.println(textsToBeSpoken.get(i));
                tts.speak(textsToBeSpoken.get(i)._originalTxt, TextToSpeech.QUEUE_ADD, params);
                textsToBeSpoken.remove(index);
            }
        }
    }
}

在应用程序中的其他线程中,我将在 textsToBeSpoken 中插入要说话的对象,而在其他线程中,如果大小 > 0,它将检查 textsToBeSpoken 的大小,它会出现循环将调用 speakUpSon() 方法。

直到这里一切正常,但我收到以下错误消息


08-14 11:42:04.370: E/ActivityThread(4945): Activity com.PI.prototype.translator.Translator 泄露了原本绑定在这里的 ServiceConnection android.speech.tts.TextToSpeech$Connection@b4669088

【问题讨论】:

  • 您是否在完成所有 TTS 后调用关机?
  • 我是在告诉系统只在 speakUpSon() 中朗读文本,所以要调用 shutdown() 吗?
  • @GabeSechan,我尝试了shutdown(),错误没有再次弹出,谢谢

标签: android text-to-speech


【解决方案1】:

您必须在代码中的某处调用 tts.shutdown(),最好在 onStop() 并调用 initTTS();在 onStart() 中

【讨论】:

  • 对不起,我还是个 android 新手,onStop() 和 onStart() 来了吗?
  • 在您的 Translator 类中只需覆盖 onStart() 和 onStop()。
  • @Override protected void onStart() { initTTS(); super.onStart(); } @Override protected void onStop() { tts.shutdown(); super.onStop(); }是这样的吗?
  • 好的,没有再次弹出,非常感谢,您能解释一下导致问题的原因
  • 当你初始化一个TextToSpeech对象时,它绑定了一个TextToSpeech引擎,你必须调用shutdown来释放这个引擎使用的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
相关资源
最近更新 更多