Сколько данных и мощности потребляет Firebase дочерний слушатель? - PullRequest
0 голосов
/ 05 июля 2018

Я посмотрел более ранние сообщения, касающиеся дочерних слушателей firebase ( Как на самом деле работает слушатель firebase? ). Но я все еще не мог найти то, что искал.

У меня есть приложение для Android с сервисом переднего плана, которое работает полный рабочий день, и в нем есть дочерний слушатель. Основываясь на любых дочерних, обновленных / удаленных операциях, некоторые операции выполняются сервисом.

Проблема, с которой я сталкиваюсь, заключается в том, что потребляется много энергии, и это связано с отправленными / полученными данными из Интернета (на основе чтения батареи). Я почти уверен, что дочерний слушатель был оптимизирован для уменьшения потребления энергии и сети.

Я хотел бы знать, как работает дочерний слушатель (то есть экспоненциальный откат и т. Д.) В следующих сценариях:

1) В этом ссылочном узле дочернего слушателя НЕТ дочерних элементов более 20 минут

Как часто в этом случае устройство Android подключается к детскому слушателю? И будет ли какое-либо энергопотребление из-за поддержания соединения с сервером с открытым сокетом

2) После 60 минут отсутствия изменений на узле firebase внезапно происходит дочерняя операция добавления / обновления / удаления, и слушатель срабатывает.

Какова потребляемая мощность в этом случае? И снова ли устройство запускает служебную нагрузку 3,5 КБ для повторного подключения к серверу?

3) Если я отключу базу данных (для firestore или realtimeDB), используя метод goOffline (или эквивалентный метод для firestore), сколько времени потребуется, прежде чем соединение будет разорвано? На основании некоторого профилирования Android, которое я сделал, я обнаружил, что разрыв почти в пять минут до того, как соединение было разорвано!

1 Ответ

0 голосов
/ 05 июля 2018

Пока есть активный слушатель, между вашим устройством Android и сервером базы данных Firebase, к которому оно подключено, есть открытый сокет. В этом случае «экспоненциальный откат» отсутствует, слушатель просто остается на связи.

Если вы не хотите сохранять такое открытое соединение, вы можете периодически звонить addListenerForSingleValueEvent или явно вызывать goOffline() / goOnline() из своего кода. Третий вариант - получить доступ к Firebase через его REST API.

Каждый раз, когда клиент повторно подключается к серверу, ему приходится проходить рукопожатие SSL. Нет способа предотвратить это на Android.

Задержка в 5 минут, скорее всего, просто тайм-аут на вашем устройстве. Клиент Firebase ничего не может с этим поделать, поскольку это нормальная часть работы сокетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...