Inicializar el objeto TextToSpeech en un subproceso de trabajo

Durante años (literalmente), mi aplicación ha sufrido problemas debido al bajo rendimiento de los motores de texto a voz, en particular, el tiempo de inicialización al llamar:

tts = new TextToSpeech(context, myOnInitListener);

Lo anterior puede hacer que la interfaz de usuario se retrase y si busca 'Inicialización de texto a voz lenta' en SO, encontrará muchas publicaciones. Las voces incrustadas de alta calidad de IVONA solían ser el peor culpable, pero elMotor de Google TTS ahora ha tomado el premio.

Su actualización de APK más reciente, causa un gran retraso en la inicialización: no es necesario un código para probar esto, puede ir a la configuración de texto a voz de Android e intentar cambiar entre los motores disponibles, mientras presiona 'escuchar una muestra', el retraso se demuestra ' bien'.

Para intentar combatir esto, he implementado lo siguiente:

private volatile TextToSpeech tts;

AsyncTask.execute(new Runnable() {
    @Override
    public void run() {
        tts = new TextToSpeech(context, volatileOnInitListener);
    }
});

Esto ha curado por completo el retraso en la inicialización, pero me temo que puede haber efectos secundarios que no he considerado. ¿Alguien puede pensar en alguno?

También estoy perplejo, ya que creía que elTextToSpeech Constructor era asíncrono y, por lo tanto, mover este constructor a un subproceso de trabajo no debería hacer ninguna diferencia. Si esta implementación es el camino a seguir, ¿por qué Google no la implementa en suTextToSpeechSettings?

Espero que alguien pueda aclarar lo anterior. Gracias por adelantado.

Editar - Cuando dije que el 'Constructor era asíncrono', realmente me refería al proceso de inicialización del motor que se inicia, y a la eventual llamada a onInit

Respuestas a la pregunta(1)

Su respuesta a la pregunta