为什么来自Service的Thread.sleep()不起作用?

时间:2014-12-02 03:10:28

标签: android multithreading handler

我的代码:

   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睡觉。 为什么上面的代码不起作用? 谢谢

1 个答案:

答案 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();
} 
相关问题