2013-06-23 18 views
6

Trong ứng dụng của tôi, tôi đang sử dụng TTS. Tôi có 20 hoạt động khác nhau được thay đổi khi người dùng vuốt sang trái hoặc sang phải. Theo hoạt động, một văn bản được nói. Tôi đang thực hiện tts với thread riêng biệt và lựa chọn hoạt động được thực hiện với chủ đề chính. Nhưng vấn đề là rất chậm, giao diện người dùng cảm thấy slugish. Khi tôi vuốt sang trái hoặc phải, một khi tts kết thúc nói văn bản, các thay đổi hoạt động không nên xảy ra vì tôi đang sử dụng chuỗi riêng cho tts. Đây là mã:Giao diện người dùng ứng dụng Text To Speech là android chậm

TTS lớp:

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(); 
} 

Gesture đọc Class: (lớp riêng)

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() phương pháp được gọi là khi nó được kiểm tra, đã thực hiện thao tác vuốt, vuốt sang phải hoặc sang trái.

LƯU Ý:

Trước khi thêm tts trong ứng dụng này, giao diện người dùng hoạt động bình thường mà không bị chậm hoặc chậm. Sau khi tôi thêm TTS, ứng dụng trở nên chậm chạp. Làm thế nào tôi có thể giải quyết vấn đề này

Trân

+0

Mọi người ở đây để trợ giúp ??? – user2498079

Trả lời

6

tôi đã cùng một vấn đề và sắp sửa nhận xét về nhìn thấy những lỗi logcat sau ...skipped x many frames. The application may be doing too much work on its main thread.

Dĩ nhiên tôi đã chắc chắn TTS đã được gọi từ thread khác mà tôi kiểm tra bằng cách sử dụng Thread.currentThread().getName() Nhưng nó chỉ ra rằng tuy nhiên OnInit đã thực sự vẫn chạy trên các chủ đề chính và có vẻ như thiết lập ngôn ngữ là một hoạt động tốn kém. Một thay đổi nhanh chóng để chạy nội dung của onInit trong một chủ đề mới và giao diện người dùng đóng băng/biên tập viên đã dừng lại:

@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() 
+0

Quên đề cập đến bạn có thể gặp lỗi mã trừ khi bạn đặt trạng thái init thành final. – sham

+0

Cảm ơn bạn rất nhiều! Tôi đã được straggling với điều này trong một thời gian dài. Khởi tạo TTS luôn giữ cho màn hình giao diện người dùng của tôi bị đóng băng. Nó không bao giờ vượt qua tâm trí của tôi rằng tôi có thể ghi đè lên phương thức onInit và chạy nó trong một Thread. Tôi nghĩ rằng đây chỉ là một giải pháp chức năng cho TTS bị chậm và giải phóng chủ đề giao diện người dùng chính! –

+1

Tôi đã thử giải pháp này, nhưng điều này sẽ không hoạt động với bất kỳ ngôn ngữ nào ngoài tiếng Anh. Nó sẽ không đặt ngôn ngữ chính xác – mobilepotato7