La interfaz de usuario de texto a voz es un android lento

En mi aplicación estoy usando TTS. Tengo 20 actividades diferentes que se cambian cuando el usuario desliza a la izquierda oa la derecha. Según la actividad, se habla un texto. Estoy ejecutando tts con hilo separado y la selección de actividad se hace con el hilo principal. Pero el problema es muy lento, la interfaz de usuario se siente pesada. Cuando deslizo a la izquierda oa la derecha, una vez que termine de hablar del texto, la actividad cambia, lo cual no debería suceder porque estoy usando hilos separados para los tts. Aquí está el código:

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

Gesture Reader Clase: (clase separada)

 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 () método se llama cuando se marca, que se hizo swipe, deslizar hacia la derecha o la izquierda.

NOTA:

Antes de agregar tts en esta aplicación, la interfaz de usuario se realizaba correctamente sin retraso o lentitud. Después de agregar TTS, la aplicación se hizo lenta. Como puedó resolver esté problema

Saludos

Tuve el mismo problema y estaba a punto de comentar al ver el siguiente error logcat ...skipped x many frames. The application may be doing too much work on its main thread. ...skipped x many frames. The application may be doing too much work on its main thread.

Por supuesto, estaba seguro de que se estaba llamando a TTS de otro hilo que he comprobado con Thread.currentThread().getName() Pero resulta que sin embargo, OnInit hecho se sigue ejecutando en el hilo principal y parece que la configuración del idioma es un costoso operación. Un cambio rápido para ejecutar contenidos de onInit en un nuevo hilo y la congelación de la interfaz de usuario / coreógrafo quejándose se detuvo:

 @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() 
  • ¿Cómo agregar voces nuevas a Android Pico TTS?
  • Ejecución de TTS Android en un servicio
  • Problema de STOP de texto a voz
  • ¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?
  • ¿Cómo puedo guardar el archivo Text to Speech como formato .wav / .mp3 en idioma árabe en External Storage?
  • TTS: El éxito regresó de onInit () pero aún hay retraso para hablar primero
  • Android "speak fallado: no está vinculado al motor tts"
  • No se puede detectar la finalización del androide TTS (devolución de llamada).
  • ¿Cómo saber si un motor TTS específico está activado?
  • ¿Existe una utilidad o API para convertir abreviaturas abreviadas de SMS a oraciones adecuadas?
  • Cómo cambiar la voz de un motor TTS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.