【问题标题】:Firebase keepSynced(true)Firebase 保持同步(真)
【发布时间】:2017-05-19 15:08:58
【问题描述】:

当我在 Firebase 数据库中的多个路径上使用同步时,有哪些权衡?

databaseRef.keepSynced(true);

我从不清除这些路径的同步。

另外,我可能会调用 databaseRef.keepSynced(true);在同一路径上多次。不是问题吗?

我也在用

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

那么在电池寿命、内存问题方面,我应该为这种同步“支付”什么费用?

【问题讨论】:

  • 请注意,根据pamartinezandres.com/…,keepSynced 还会下载整个快照每次用户启动您的应用程序

标签: android firebase firebase-realtime-database


【解决方案1】:

当您使用 keepSynced() 方法时,您是在告诉 Firebase 下载并缓存来自 databaseRef 的所有数据。我希望 databaseRef 不是您数据库的根引用,因为如果是,您正在下载整个数据库,这不是一个好习惯。

您应该使用keepSynced() 来缓存您的应用离线工作真正需要的节点。

您可能想知道它与setPersistanceEnabled(true) 有何不同。好吧,setPersistanceEnabled(true) 仅在有一个 Listener 连接到该节点时才缓存数据(当数据至少被读取一次时)。

另一方面,keepSynced(true) 缓存来自该节点的所有内容,即使没有附加侦听器。

【讨论】:

  • 您的回答对我找到查询缓慢的原因非常有价值。我们有这样的代码:DatabaseReference reference=...;reference.keepSynced(true);reference.limitToLast(1).addListenerForSingleValueEvent...。这将下载所有节点以供参考!正确的代码是:Query query=...limitToLast(1);query.keepSynced(true);query.addListenerForSingleValueEvent...
  • setPersistanceEnabled(true) 是否缓存该用户应用程序附加的所有侦听器的数据,或者在多人游戏数据库中,它是否会缓存每个玩家从他们自己的设备附加侦听器的所有数据/应用?此数据库侦听器总数是多少。还是由设置持久性的用户总计(true)?
  • @Stotch 是的,它会缓存您附加监听器的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多