Когда вы присоединяете слушателя к данным, которые уже присутствуют на устройстве, Firebase сразу же удовлетворяет слушателя данными, которые у него есть на устройстве.
Таким образом, клиент Firebase немедленно вызовет ваш onChildAdded
с 10 дочерними узлами, которые мы сохранили ранее.
Затем отправляет запрос на сервер, чтобы получить самую последнюю версию. Это делается с помощью так называемой дельта-синхронизации, что означает отправку хеш-значения локального состояния, которое сервер сравнивает с текущим состоянием в базе данных. Затем сервер отправляет дельту обратно, которую клиент Firebase затем использует для обновления своего внутреннего снимка и состояния на диске.
Если есть какие-либо изменения, клиент Firebase затем запускает правильные локальные события, чтобы позволить вашему приложению обновиться до нового состояния. Так что в случае, когда были добавлены два дочерних узла, для каждого из них будет вызываться onChildAdded
.
Если бы вы использовали слушателя с ограничением, скажем, limitToLast(10)
, тогда клиент Firebase также вызвал бы onChildRemoved
для двух дочерних элементов, которых больше нет в этом запросе (так как они были вытеснены новыми дочерними элементами ).