Просмотр локальной базы данных с помощью Stheto на Android

В настоящее время я создаю приложение для Android, которое использует базу данных Firebases в реальном времени в качестве бэкэнда. Я заметил, что получение дочерних узлов в первый раз занимает больше времени, поэтому я предполагаю, что Firebase использует локальную базу данных. Однако локальные файлы, по-видимому, будут удалены, если приложение будет убито (даже с включенным сохранением).

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

Есть ли способ посмотреть, как выглядит локальная база данных? И есть ли возможность сохранить данные, даже если приложение убито?

1 ответ

Решение

tl;dr: вы, вероятно, не включили сохранение диска.

Что происходит при первом чтении из базы данных

Когда ваше приложение впервые подключается к Firebase, это происходит:

  1. При первом получении данных Firebase устанавливает соединение между клиентом и сервером. Время, которое требуется, зависит от пути между клиентом и сервером, но обычно составляет несколько секунд.

  2. Если вы используете аутентификацию, то это первоначальное "рукопожатие" также включает в себя вход пользователя или обновление его токена.

  3. Затем Firebase извлекает данные, которые вы запросили. Время, которое это занимает, в основном зависит от объема запрашиваемых данных и пропускной способности клиентского устройства.

Если эти шаги, шаг 3 часто занимает наименьшее количество времени. Тем не менее, когда вы запрашиваете дополнительные данные, клиент Firebase должен выполнить только шаг 3, поскольку он поддерживает свое соединение и состояние аутентификации между вызовами.

Где Firebase кеширует данные

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

Когда вы отсоединяете всех слушателей для определенного фрагмента данных, Firebase немедленно удалит его из памяти. Таким образом, это означает, что в следующий раз, когда вы присоедините слушателя, ему придется перечитать данные (шаг 3 сверху).

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

Где живет локальный дисковый кеш

Кэш локального диска - это обычная база данных sqlite. Если вы заинтересованы в поиске его в целях отладки, он (по крайней мере для меня) живет в /data/data/{applicationId}/{applicationId}_default, Это база данных sqlite. Но формат не задокументирован, так что вы сами разберетесь в нем.

Также см:

Другие вопросы по тегам