나는 사용자에게 단어를 계속 읽는 활동을하고 있으며, 코드 완성시 뭔가를 표시하기 위해 textTospeech와 함께 onUtteranceCompleted를 사용합니다.Android : runOnUiThread가 항상 올바른 스레드를 선택하지 않습니다?
내부 onUtteranceCompleted 나는이 두 번째로 함수를 지연하는 코드가 : 그것은 잘 작동처럼
Runnable task = new Runnable() {
public void run() {
//runs on ui
runOnUiThread(new Runnable() {
public void run() {
readWord();
}
});
}
};
worker.schedule(task, 1, TimeUnit.SECONDS);
이 보인다, 그러나 나는 그것이 문제를 일으키는 생각합니다. 내 휴대 전화 화면을 회전하면 (새로운 활동이 시작됨) 백그라운드에서 일부 단어를 읽는 소리가 들립니다. 나는 이것이 배경에서 계속되는 runOnUiThread()
때문에 일어난다 고 생각합니다.
어떻게 2 가지 활동을 피할 수 있습니까? 이상한 패치를하면서 화면이 회전하는 것을 막을 필요가 없다면 더 좋아할 것입니다!
감사합니다편집 :
public void readWord() {
if (this.readingOnPause) {
return;
}
txtCurrentWord.setText(currentItem[1]);
this.hashAudio.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"word");
this.tts.setLanguage(Locale.US);
this.tts.speak(this.currentItem[1], TextToSpeech.QUEUE_FLUSH,this.hashAudio);
}
EDIT2 : 노동자의
인스턴스 :
private static final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
이 readWord() 함수를 보여 .. – L7ColWinters
노동자 java.util.Timer 맞습니까? –
은 다음과 같이 인스턴스화됩니다. private static final ScheduledExecutorService worker = Executors \t \t \t .newSingleThreadScheduledExecutor(); – xtrimsky