Android – Firebase Offline Best Practices

Я застрял в понимании концепции создания Firebase App Offline. В соответствии с документацией нам необходимо позвонить:

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

Но где мы должны это назвать? Должен ли он использоваться во всех действиях приложения? Потому что, когда я использую это в моем методе класса onCreate (), мое приложение прерывается непрерывно.

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

Еще одно сомнение заключается в различии между вышеуказанным и DatabaseReference.keppSynced(true);

SetPersistenceEnabled следует вызывать один раз при запуске, прежде чем вы получите первую ссылку базы данных. Я вызываю мой непосредственно после вызова FIRApp.configure ().

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

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

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

Более подробную информацию о сохранении и синхронизации можно прочитать здесь в документации Firebase: https://firebase.google.com/docs/database/android/offline-capabilities

Создание класса приложения

 public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); FirebaseDatabase.getInstance().setPersistenceEnabled(true); } } 

И измените свой манифест как

 <application android:name=".MyApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher" 

Взято отсюда

Не уверен, если это актуально здесь. Но есть и другой сценарий, когда это может произойти.

Если ваше приложение имеет сервис (с другим процессом) и вы создаете свой собственный класс приложений, служба и приложение переднего плана будут использовать тот же класс приложения (не тот же самый экземпляр) для инициализации. Теперь, когда я использую com.google.firebase: firebase-crash dependancy для обработки сбоев, он создает фоновое обслуживание your.app.packagename: background_crash. По какой-то причине это вызывало сбои в моем приложении. В частности, потому что в моем классе приложения я звонил,

 FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

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

 if (!FirebaseApp.getApps(this).isEmpty()) FirebaseDatabase.getInstance().setPersistenceEnabled(true);