Как я вижу, вы используете addListenerForSingleValueEvent()
, что означает, что слушатель будет читать данные точно один раз.Это означает, что ваш метод onDataChange()
запускается с текущим значением (из кэша, если доступно, в противном случае с серверов Firebase), и сразу после этого прекращает прослушивание.В этом случае нет необходимости удалять слушателя.Единственное время, когда addListenerForSingleValueEvent
необходимо отменить, - это когда нет сетевого подключения, когда вы подключаете его, и у клиента нет локальной копии данных, либо потому, что был другой активный слушатель, либо потому, что у него есть копияданные на диске.
Если вы хотите продолжать прослушивать изменения, вы должны использовать addValueEventListener()
.Использование такого типа слушателя означает, что ваш onDataChange()
метод вызывается немедленно с текущими данными, но (в отличие от addListenerForSingleValueEvent
) слушатель останется активным после этого, и ваш onDataChange()
будет также вызван для последующих изменений.
Вы можете использовать addValueEventListener()
после закрытия приложения Android, не удаляя его.Обычно, когда вы используете слушателя, вам также необходимо удалить его в соответствии с жизненным циклом действия.Если не удалить слушателя, приложение будет работать только в течение определенного периода времени, потому что Android остановит ваш сервис, если приложение не на переднем плане.Это позволяет экономить ресурсы, когда приложение не используется.Это также может помешать вашему приложению работать в сети или даже полностью убить процесс приложения.Вы ничего не можете сделать, чтобы предотвратить это, кроме как сделать его службой переднего плана, как вы уже упоминали.
Служба переднего плана, вероятно, не лучшая вещь для вашего случая, и при этом это не лучшая вещь дляваши пользователи.Подробнее о ограничениях на фоновые службы .
Я рекомендую использовать Firebase Cloud Messaging , чтобы уведомлять ваше приложение о том, что что-то изменилось и может заинтересовать его.Ваши пользователи будут получать уведомления, даже если они будут держать свое приложение закрытым.