Как обойти долгую инициализацию TTS Google?

В моём приложении используется TTS от Google. TTS требуется практически сразу после старта приложения (через 1-2 секунды), но его инициализация выполняется слишком долго, порядка 4-5 секунд, на слабых устройствах, время может вырасти. Была попытка запуска TTS в фоне при старте ОС и после закрытия приложения по примеру: https://overcoder.net/q/383172/%D0%B2-%D0%BE%D0%B1%D1%85%D0%BE%D0%B4-%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B8-%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-google-tts-engine-%D0%B2-android. Данная попытка завершилась неудачно, т.к. после выгрузки моего приложения из ОЗУ и при следующем запуске, инициализацию требовалось возобновлять, а это те же 4-5 секунд. Помогите пожалуйста найти способ выйти из сложившейся ситуации. Буду благодарен за ссылки на рабочие программы для их использования в качестве примера.

Дополнено: немного изменил код, теперь инициализирую TTS практически сразу после старта приложения в активити экрана загрузки Splash.

public class Splash extends AppCompatActivity
{
    public static TextToSpeech mTTS = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // инициализация преобразования текста в речь
        mTTS = new TextToSpeech(Splash.this, new TextToSpeech.OnInitListener()
        {
            @Override
            public void onInit(int status)
            {
                if (status == TextToSpeech.SUCCESS)
                {
                    int result = mTTS.setLanguage(Locale.getDefault());

                    if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
                    {
                        //Log.e("TTS", "Извините, этот язык не поддерживается");
                    }
                    else
                    {
                        startActivity(new Intent(Splash.this, MainActivity.class)); // ЗАПУСК основной программы
                    }
                }
                else
                {
                    //Log.e("TTS", "Ошибка!");
                }
            }
        });

        //finish();
    }

    //@Override
    public static void Speech(String text, int mode)
    {
        if (mode == 0)
        {
            mTTS.speak(text, TextToSpeech.QUEUE_FLUSH, null);
        }
        else if (mode == 1)
        {
            mTTS.speak(text, TextToSpeech.QUEUE_ADD, null);
        }
    }

    @Override
    protected void onDestroy()
    {
       if (mTTS != null)
        {
            mTTS.stop();
            mTTS.shutdown();
        }

        super.onDestroy();
    }

Вызываю преобразование текста в речь из MainActivity следующим образом:

Splash.Speech("Приложение запущено", 0);

При таком подходе моя проблема казалось была решена но, появились другая: после установки приложения и при его ПЕРВОМ запуске, звук проигрывается сразу же после исчезновения экрана загрузки, без каких-либо задержек, как мне и нужно. НО, стоит мне выгрузить приложение из ОЗУ и запустить его через непродолжительное время, как проблема с задержкой воспроизведения голоса (4-5 секунд) снова проявляется. Проблему ИНОГДА позволяет избежать только переустановка приложения и соответственно первый запуск после установки позволяет проигрывать голос без задержки. Наверняка при завершении приложения или при его старте, я забываю некую важную деталь в работе с TTS, но какую? Что я делаю не так?


Ответы (0 шт):