场景
我已经在Play商店发布了我的应用程序,它使用
- 火力基地实时数据库
- 为我的每个Firebase数据库设置了setPersistenceEnabled(true(。
在跟踪崩溃几周后,我遇到了这次崩溃。
经过一些研究,我得出的结论是,Firebase 数据库的数据持久性缓存的数据不一致可能是导致这次崩溃的原因。
所以我通过调用FirebaseDatabase.getInstance().setPersistenceEnabled(false);
关闭了数据持久性 对于我所有的数据库。
通过上述代码更改,我在 Play 商店中发布了我的应用程序的更新。
但是用户(在禁用持久性的新版本上(仍然崩溃。
所以我的查询是
1( 即使关闭持久性,应用程序也会使用持久化数据吗?
2(用户是否需要清除应用程序数据以消除崩溃?(因为不一致/损坏的缓存数据是崩溃背后的原因(
以下是我的应用中与 Firebase 数据库相关的 gradle 依赖项
compile 'com.google.firebase:firebase-database:12.0.1'
compile 'com.firebaseui:firebase-ui-database:3.3.0'
关闭了 setPersistenceEnabled,Firebase 会从缓存的数据中读取数据吗?
答案是否定的。使用以下代码行后:
FirebaseDatabase.getInstance().setPersistenceEnabled(false);
这意味着当您脱机时,您将无法查询您的数据库。此功能将被禁用。更明确地说,每个使用 Firebase 数据库并使用 setPersistenceEnabled(false( 的客户端都不会维护自己的数据库内部(本地(版本。
但是,启用持久性后,Firebase 实时数据库客户端在联机时同步的任何数据都会保留到磁盘并可离线使用,即使用户或操作系统重新启动应用也是如此。这意味着,通过使用缓存中存储的本地数据,你的应用将像联机一样工作。
以防万一其他人可能需要此信息。
默认情况下,android 和 ios 应用程序启用了离线支持,但仅在内存中处理间歇性连接。此缓存将在应用重启时丢失。
调用 setPersistenceEnabled(true( 会将写入操作队列也保存到磁盘(除了内存中的那些(,以使它们即使在应用程序重新启动时也可用。
:看
https://firebase.google.com/docs/reference/android/com/google/firebase/database/FirebaseDatabase#setPersistenceEnabled(布尔值(
https://firebase.google.com/docs/database/android/offline-capabilities#section-offline-behavior