Обертывание вызова функции с ее обратным вызовом в одной блокирующей функции в Java (специфично для Android)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обертывание вызова функции с ее обратным вызовом в одной блокирующей функции в Java (специфично для Android)

Сообщение Anonymous »

В системе Android существует API TextToSpeech, который позволяет инициализировать движок TTS - это происходит путем вызова конструктора TextToSpeech и передачи прослушивателю, вызываемому позже, с результатом:

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

mEngine = new TextToSpeech(mContext, listener, ENGINE_GOOGLE_NAME);
Я хочу создать одну блокирующую функцию, которая вызывает конструктор и возвращает результат после выполнения обратного вызова.
Как я понял, независимо от того, из какого потока вызывается конструктор, прослушиватель запускается из «основного» потока приложения.
Моя идея заключалась в том, чтобы иметь пример функции (упрощенный код — Надеюсь понятно):

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

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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