Согласно Firebase documentation
По умолчанию клиент Firebase будет держать данные в памяти, когда приложение работает, но не тогда, когда он будет перезапущен. Установив это значение равным true, данные будут сохраняться на устройстве (диске) хранилище и, таким образом, будут доступны снова, когда приложение будет перезапущено (даже если в это время нет сетевого подключения). Обратите внимание, что этот метод должен быть вызван перед созданием вашей первой ссылки Firebase и должен быть вызван только один раз для каждого приложения.Если ваше приложение использует Firebase Authentication, клиент автоматически сохранит токен аутентификации пользователя при перезапуске, даже если не поддерживается постоянство. Но если токен авторизации истек в автономном режиме и вы включили сохранение, клиент будет приостанавливать операции записи до тех пор, пока вы не повторите проверку подлинности (или явно вызываете unauth), чтобы предотвратить отправку ваших писем не прошедших проверку подлинности и отказ из-за правил безопасности.
Обратите внимание, что он говорит, что данные будут сохраняться на диске и будут доступны, когда приложения рестарт. Если вы посмотрите на life cycle of an Activity, вы увидите, что действие прекращается при изменении другой активности. Итак, пока ваше приложение все еще открыто, а пользователь только переходит к другим действиям, данные остаются в силе.
Но не говорите ничего об убийстве вашего приложения и сохраняйте данные. Вот почему вам нужно keepSynced()
:
Позвонив keepSynced (истинную) на месте, данные для этого места будет автоматически загружены и синхронизированы, даже тогда, когда нет слушателей не прикрепляются для этого места. Кроме того, , в то время как местоположение сохраняется синхронизированным, оно не будет выведено из кэша постоянного диска.
Pay, когда он Пенза-говорит «в то время как местоположение хранится синхронизировано, он не будет выселен из постоянного дискового кэша», это означает, что если вы не используете keepSynced(true)
ваши данные могут быть сброшен путем, когда приложение убит/закрыто.
Итак, чтобы сохранить и продолжить данные после того, как ваше приложение будет убито, вам необходимо использовать как FirebaseDatabase.getInstance().setPersistenceEnabled(true);
, так и keepSynced(true)
.
FirebaseDatabase.getInstance(). SetPersistenceEnabled (true); не делает чат доступным для офлайн – Gattsu
@ maveň, проверьте приведенный ниже ответ и мои разъяснения по нему. – mradzinski
@Frank van Puffelen, если функция persistence включена и приложение завершено, то в следующий раз, когда приложение запускается, Firebase копирует всю всю базу данных с сервера на память и на диск или просто копирует эти элементы с измененного сервера. То есть он может определить, что такое дельта между данными на диске устройства и данными на сервере и только перемещать данные дельта в телефон? – Gruntcakes