【问题标题】:Text To Speech app UI is slow android文本到语音应用程序 UI 很慢 android
【发布时间】:2013-06-19 22:47:39
【问题描述】:

在我的应用中,我使用的是 TTS。我有 20 种不同的活动,当用户向左或向右滑动时它们会发生变化。根据活动,说出文本。我正在使用单独的线程执行 tts,并且活动选择是通过主线程完成的。但是问题很慢,UI感觉呆滞。当我向左或向右滑动时,一旦 tts 说完文本,活动就会发生变化,这不应该发生,因为我正在为 tts 使用单独的线程。 这是代码E:

TTS 类:

public class textToSpeech {

TextToSpeech tts=null;

public textToSpeech(Context con)
{
    tts = new TextToSpeech(con,new TextToSpeech.OnInitListener() {

        @Override
        public void onInit(int status) {

            if(status != TextToSpeech.ERROR) // initialization me error to nae ha
            {
                tts.setPitch(1.1f); // saw from internet
                tts.setSpeechRate(0.4f); // f denotes float, it actually type casts 0.5 to float
                tts.setLanguage(Locale.US);
            }

        }
    });
}

public void SpeakText (String text)
{
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); // TextToSpeech.QUEUE_FLUSH forces the app to stop all the sounds that are currently playing before speaking this text
}


public void stopSpeak()
{
    tts.stop();
}

手势阅读器类:(单独的类)

public void decideAlphabet()
{
    tts.stopSpeak();

    threadForTTS.start();

    switch (i)
    {
        case 0:
            activities=null;
            activities = new Intent(contxt,A.class); 
            contxt.startActivity(activities); 

            break;

        case 1:
            activities=null;
            activities = new Intent(contxt,B.class);
            contxt.startActivity(activities);

            break;
                   ....... 20 more case statements for selecting activities
              }

decideActivity() 方法在检查时被调用,滑动是向右还是向左滑动。

注意:

在此应用中添加 tts 之前,UI 运行正常,没有延迟或缓慢。添加 TTS 后,应用程序变慢了。我该如何解决这个问题

问候

【问题讨论】:

  • 这里有没有人帮忙???

标签: java android text-to-speech


【解决方案1】:

我遇到了同样的问题,正要评论看到以下 logcat 错误...skipped x many frames. The application may be doing too much work on its main thread.

当然,我确定 TTS 是从我使用 Thread.currentThread().getName() 检查的另一个线程调用的,但事实证明 OnInit 确实仍在主线程上运行,看起来设置语言是一项昂贵的操作.快速更改以在新线程中运行 onInit 的内容并且 UI 冻结/编排抱怨停止:

@Override
public void onInit(int status) {
   new Thread(new Runnable() {
      public void run() {
         if(status != TextToSpeech.ERROR) // initialization me error to nae ha
         {
            tts.setPitch(1.1f); // saw from internet
            tts.setSpeechRate(0.4f); // f denotes float, it actually type casts 0.5 to float
            tts.setLanguage(Locale.US);
         }
      }
   }
}).start()

【讨论】:

  • 忘了提你可能会得到一个代码错误,除非你将初始化状态设置为最终状态。
  • 非常感谢!我已经为此苦苦挣扎了很长时间。 TTS 初始化总是冻结我的 UI 屏幕。我从来没有想过我可以重写 onInit 方法并在线程中运行它。我认为这只是 TTS 缓慢并冻结主 UI 线程的一种功能解决方案!
  • 我已经尝试过这个解决方案,但这不适用于英语以外的任何语言。它不会正确设置语言
  • @mobilepotato7 你是如何设置语言的?另外,您的设备上是否真的安装了其他 TTS 语言包?
  • @sham 只是使用 mTextToSpeech.setLanguage(locale); 设置语言它可以在不将其放入后台线程的情况下正常工作,但当然在后台线程之外,它会冻结 UI。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2016-12-14
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多