我的代码:
callReader.speak("Incoming call from "
+ contactName,
TextToSpeech.QUEUE_ADD, null);
backNormalMode();
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
callReader.speak("Incoming call from "
+ contactName,
TextToSpeech.QUEUE_ADD, null);
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
callReader.speak("Incoming call from "
+ contactName,
TextToSpeech.QUEUE_ADD, null);
当Thread.sleep(5000)id保留在上面的代码中时,Text to Speech说话不起作用。但是当Thread.sleep(5000)被注释时,它会成功运行。
最后,我希望当说话的时间结束时,它应该睡5秒然后再说话,然后再说5s睡觉。 为什么上面的代码不起作用? 谢谢
答案 0 :(得分:0)
我假设你试图直接从服务中的公开方法调用Thread.sleep()。
服务中的方法是同步的。 因此,睡眠将使UI唤醒超过5秒,从而导致ANR 2.服务主线程休眠也会导致ANR
你永远不应该使用来自UI或服务的任何主线程的Thread.sleep()。产生一个工作线程,并从该线程,您将能够使用TTS + sleep + TTS
编辑1:添加了代码段
public void foo(final Object a) {
// This is your service method
new Thread() {
public void run() {
// Put all your code here
<Text to speech code>
Thread.sleep(5000); // this will work here
<Text to speech code>
}
}.start();
}