Приводит ли добавление значений / дочерних событий примерно к 15 объектам firebase к увеличению размера кучи?

#java #android #firebase

#java #Android #firebase

Вопрос:

Я работаю над приложением, и мне нужно загрузить все данные пользователя при входе в систему.

Итак, я прослушиваю несколько ссылок на firebase с помощью прослушивателей значений и дочерних событий и обновляю локальную базу данных в своем приложении.

В последнее время я заметил, что когда я использую 15 или более прослушивателей (приблизительно), я получаю предупреждения об увеличении размера кучи в logcat во время ожидания valueEvents и ChildEvents.

Это случилось с кем-то здесь? Я не уверен, что мой код не реагирует или неправильно использует firebase. Возможно, это ошибка в firebase API.

Когда я комментирую строки, которые назначают прослушиватель ссылке, он работает довольно хорошо.

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

Ответ №1:

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

Firebase SDK будет использовать память пропорционально объему данных, возвращаемых вашими слушателями. Итак, если ваш слушатель извлекает большой объект, он будет использовать больше памяти. Небольшие объекты будут использовать меньше.

Можно попробовать извлечь те же данные с помощью curl (попробуйте .toString() в ссылке Firebase, чтобы получить URL-адрес) и посмотреть, сколько данных возвращается. Если это значительно больше, чем вы ожидали, вам может потребоваться адаптировать свой макет данных или используемые запросы.

Комментарии:

1. Спасибо за ваш ответ, каждый подключенный прослушиватель извлекает около 10 КБ, что звучит не так уж много. Любая другая известная проблема, которая может вызвать подобное поведение?

2. Никаких известных проблем, вызывающих это. Хранение данных Firebase сопряжено с некоторыми накладными расходами, поскольку SDK хранит внутренний кэш. Если вы удалите прослушиватели, вернется ли куча к ожидаемому размеру после сборки мусора?

3. Их удаление не помогло, проблема заключалась в том, что я попытался загрузить 2 МБ данных, после удаления некоторых ненужных данных все было в порядке, и куча не росла.

4. Прохладный. Рад это слышать.