0

设想

我已经在 Play Store 上发布了我的应用程序,它使用

  1. Firebase 实时数据库
  2. 为我的每个 Firebase 数据库设置了 setPersistenceEnabled(true)。

在跟踪崩溃几周后,我遇到了这个崩溃。

经过一番研究,我得出结论,Firebase 数据库的数据持久性缓存的数据不一致可能是导致此崩溃的原因。

FirebaseDatabase.getInstance().setPersistenceEnabled(false); 所以我通过调用我所有的数据库来关闭数据持久性。

通过上述代码更改,我在 Play Store 上发布了我的应用程序的更新。

但是用户(在禁用持久性的新版本上)仍然会崩溃。

所以我的查询是

1) 即使关闭持久性,应用程序是否仍会使用持久化数据?

2)用户是否需要清除应用程序数据才能消除崩溃?(因为不一致/损坏的缓存数据是崩溃的原因)

以下是我的应用程序中与 firebase 数据库相关的 gradle 依赖项

compile 'com.google.firebase:firebase-database:12.0.1'
compile 'com.firebaseui:firebase-ui-database:3.3.0'
4

2 回答 2

1

如果我关闭 setPersistenceEnabled,Firebase 会从缓存数据中读取吗?

答案是不。使用以下代码行后:

FirebaseDatabase.getInstance().setPersistenceEnabled(false);

这意味着您在离线时将无法查询数据库。此功能将被禁用。更清楚地说,每个使用 Firebase 数据库并使用 setPersistenceEnabled(false) 的客户端都不会维护它自己的内部(本地)版本的数据库。

但是,通过启用持久性,Firebase 实时数据库客户端在联机时将同步的任何数据都将持久保存到磁盘并且可以脱机使用,即使用户或操作系统重新启动应用程序也是如此。这意味着您的应用程序将使用存储在缓存中的本地数据像在线一样工作。

于 2018-05-03T14:07:56.583 回答
0

以防万一其他人可能需要此信息。

默认情况下,android 和 ios 应用程序启用了离线支持,但仅在内存中处理间歇性连接。此缓存将在应用重新启动时丢失。

调用 setPersistenceEnabled( true ) 会将写入操作队列持久保存到磁盘(内存中的那些除外),以使它们即使在应用程序重新启动时也可用。

:看

https://firebase.google.com/docs/reference/android/com/google/firebase/database/FirebaseDatabase#setPersistenceEnabled(boolean)

https://firebase.google.com/docs/database/android/offline-capabilities#section-offline-behavior

于 2020-05-27T13:21:29.803 回答