VanuDiplomat Ответов: 0

Держите поток живым, чтобы получить обратный вызов


Я уже использовал обратные вызовы раньше, но только тогда, когда мой клиентский код не отвечал за поддержание работы программы/потоков (например, в приложении для Android). Все, что я хочу сейчас сделать, это сделать действительно простой Firestore Java-клиент, который прослушивает обновления базы данных в реальном времени. Мой код очень прост и дает вам представление о том, что я делаю. хотеть добиться чего-то, но я не знаю как.

Что я уже пробовал:

public class Main {

    public static void main(String[] args) {
        DatabaseClient databaseClient = new DatabaseClient();
        databaseClient.listenForUpdates(() -> {
            System.out.println("Alright, new update, gotcha");
        });
    }
}
public class DatabaseClient {

    private final Firestore firestore = FirestoreClient.getFirestore();

    void listenForUpdates(OnUpdateListener listener) {
        firestore.document("MyDocument").addSnapshotListener((value, error) -> {
            //Ignore 'value' and 'error' in this example
            listener.onUpdate();
        });
    }
}
public interface OnUpdateListener {

    void onUpdate();
}
Как и ожидалось, теперь он выполняется run() один раз, а потом прекращается. Итак, как я могу поддерживать работу программы, чтобы она могла получать обратный вызов при обновлении базы данных? Я думаю, что мог бы добавить бесконечный цикл, перевести поток в спящий режим и проверить наличие обновлений, но я хотел бы узнать, как сделать эту работу с помощью обратных вызовов.

Gerry Schmitz

Всегда есть "петля" или какое-то время где-то. В Windows это "цикл сообщений". В консольном приложении вы создаете свое собственное. Поскольку асинхронность бессмысленна без "другой работы", которую нужно сделать в то же время, вы делаете ее синхронной с механизмом таймаута.

VanuDiplomat

Спасибо, в этом есть смысл. :)

0 Ответов