Я хочу запустить независимый метод, когда оба 1. и 2. были завершены
В вашем первом примере, добавив полного слушателя, вы всегда сможете знать, когда операция завершена. Если task.isSuccessful()
возвращает true
, вы точно знаете, что операция завершена. Кроме того, вы также можете позвонить getResult()
, чтобы получить элементы, которые являются частью вашей коллекции restaurants
. Кроме того, следующая строка кода:
DBInstance.collection("restaurants")
.get()
Возвращает объект Task<QuerySnapshot>
. Если у вас было два разных запроса, вы могли бы передать оба объекта Task
методу Tasks whenAllSuccess () , как объяснено в моем ответе из следующего поста:
Таким образом, вы сможете узнать, когда обе операции завершены. Однако при использовании второго решения вы не можете знать, когда получение данных из базы данных завершено, поскольку Cloud Firestore
- это база данных в реальном времени, и получение данных может никогда не завершиться. Вот почему она называется базой данных реального времени, потому что в любой момент ее можно изменить, добавить или удалить элементы.
Единственный способ частично узнать, есть ли у вас все данные в конкретной коллекции, - это выполнить запрос типа single value . Даже в этом случае данные могут измениться после вызова этого слушателя, поэтому все, что у вас есть на самом деле, - это snapshot
в определенный момент времени.
В заключение, единственное решение, которое у вас есть, - это использовать whenAllSuccess()
и передать два или даже больше Task
объектов.
Я кратко прочитал о BroadcastReciever. Это актуально?
Нет, это не так. Согласно документам, класс BroadcastReceiver :
Базовый класс для кода, который получает и обрабатывает намерения широковещания, отправленные Context.sendBroadcast (Intent).
Итак, дело не в этом.
или, может быть, я могу создать пользовательский прослушиватель, работающий в фоновом потоке?
Клиент Cloud Firestore уже запускает все сетевые операции в фоновом потоке. Это означает, что все операции выполняются без блокировки вашего основного потока. Размещение в фоновом потоке не дает никаких дополнительных преимуществ.