.observe и .observeSingleEvent предназначены для двух разных целей.
.observe is used when you want to be notified of changed data.
.observeSingleEvent gets data **once** and you're not notified about future changes
Пример.
Предположим, приложение чата имеет два типа пользователей; пользователь и администратор. В этом примере типы пользователей не меняются.
Когда пользователь входит в систему, приложение считывает этот узел пользователей, чтобы определить их тип пользователя:
/users/uid_x
, и структура узла будет такой
uid_x
user_name: "Henry"
user_type: "Admin"
fav_food: "Pizza"
. НаблюдениеSingleEvent здесь полезно, так как данные нужно читать один раз, а не снова.
Однако, когда пользователь отправляет сообщение, чтобы его могли увидеть другие, другие пользователи должны быть уведомлены, поэтому .observe полезен для этой цели.
Имейте в виду, что добавление .observe к узлу приведет к однократному считыванию всех дочерних узлов, а затем оставит наблюдателя для уведомления приложения о будущих изменениях. Вы можете получить более подробную информацию, используя .childAdded, .childChanged и .childRemoved вместо .value.