Вызов функции обертывания с его обратным вызовом в одной функции блокировки в Java (спецификация Android)Android

Форум для тех, кто программирует под Android
Anonymous
Вызов функции обертывания с его обратным вызовом в одной функции блокировки в Java (спецификация Android)

Сообщение Anonymous »

В системе Android существует API TextTospeech, который позволяет инициализировать двигатель TTS - это происходит путем вызова конструктора TextTospeech и предоставления прослушивателя позднее с результатом: < /p>

Код: Выделить всё

mEngine = new TextToSpeech(mContext, listener, ENGINE_GOOGLE_NAME);
< /code>
То, что я хочу достичь, - это иметь одну функцию блокировки, которая вызывает конструктор и возвращает после того, как обратный вызов. Поток конструктор называется, слушатель уволен из поток «основной» приложения.
private TextToSpeech mEngine;
CountDownLatch cdl = new CountDownLatch(1);
ExecutorService executorService = Executors.newSingleThreadExecutor();

public void initializeBlocking() {

executorService.execute(() -> { // new thread
mEngine = new TextToSpeech(mContext, status -> {

cdl.countDown(); // callback body (executes in "main" thread)

}, ENGINE_GOOGLE_NAME);
});

cdl.await(); // main thread

}
Я надеялся, что слушатель также будет вызван в новом потоке, но так как он вызван в основном потоке, а основной поток ждет ( cdl.await () ) Это никогда не называется, и все приложение застряло. Может я делаю что -то в основном не так?


Подробнее здесь: https://stackoverflow.com/questions/793 ... n-java-and

Вернуться в «Android»