【问题标题】:Firebase offline capabilities causing memory problemsFirebase 离线功能导致内存问题
【发布时间】:2018-04-23 01:25:45
【问题描述】:

我正在开发一个使用 firebase 数据库存储数据的聊天应用。开发聊天应用程序的常用方法是保持数据库节点同步,以便您离线访问消息。因此,当我实现 firebase 离线功能以保持数据节点同步时,问题就出现了。 Firebase 建议离线访问数据的两个必要步骤:

启用磁盘持久性

这是根据文档通过使用这行代码启用的(在我的情况下,我将它添加到应用程序类中):

FirebaseDatabase.getInstance().setPersistanceEnabled(true);

保持节点同步

只需将 keepsynced(true) 添加到您希望保持同步的任何数据库引用即可启用此功能,如下所示:

ChatNode.keepSynced(true);

两者有什么区别?

根据本网站上的 firebase 团队回答,我推断:

1)(磁盘持久性)将数据存储在设备磁盘上以供需要时使用,无论您写入数据还是读取数据都会存储数据。

a)如果离线写入数据:数据存储在磁盘上,再次在线时发送到数据库。

b)如果您离线读取数据:在线读取并保存在磁盘中并存储的侦听器,您将能够从磁盘离线读取它。

2)(保持同步为真)将以两种方式保持数据库引用同步:

a) 如果您还使用(磁盘持久性)和(保持同步),您将能够使数据在磁盘上保持同步......这似乎是(磁盘持久性)的默认行为)。

b)如果您单独使用(保持同步),那么您只存储到所谓的应用内存中。

问题

我确实设置了这两种方法,但我的应用程序现在非常滞后和缓慢,有时会自行停止。

问题

如果我上面所说的所有事情都是真的,那么这种离线能力的方法会不会对我的应用造成沉重的负担?

如果我让许多侦听器保持同步并启用持久性,那么磁盘会充满数据吗?我应该清理数据吗?两种方法都自己清理磁盘上的数据吗?数据是否会自行从内存中清除?

我想避免我的应用出现滞后和响应缓慢的问题,感谢您的帮助。

【问题讨论】:

  • 我的 iOS 应用程序也遇到了滞后和缓慢的响应。您是否仅在 android 而不是 iOS 中遇到这种情况?延迟行为是否仅发生在真实设备或模拟器上?

标签: android firebase firebase-realtime-database offline-caching


【解决方案1】:

您的假设是正确的。如果您使用FirebaseDatabase.getInstance().setPersistenceEnabled(true);,则意味着 Firebase 将为您的数据库创建一个本地副本,这也意味着您离线时所做的每一项更改都将添加到queue。因此,随着此队列的增长,本地操作和应用程序启动将减慢。所以速度取决于该队列的尺寸。但请记住,Firebase 被设计为一个在线数据库,可以在断开连接的短时间到中间时间段内工作,而不是作为离线数据库。

其次,如果正在使用许多监听器,请不要忘记根据活动的生命周期删除监听器,如下所示:

databaseReference.removeEventListener(valueEventListener);

【讨论】:

  • 感谢您的回复,但我想知道谁负责清理磁盘上存储的数据并存储我或 firebase。如果存储的数据导致延迟,那么好的方法是清理它们,那么我该怎么做呢?
  • 你是。当您重新上线时,queue 中的所有操作都将在 Firebase 服务器上提交。这意味着此时您的queue 将为空。
  • 那么磁盘上的队列被释放了,那么是什么导致了延迟?
  • 其他聊天应用程序(流行的)他们在线和离线管理所有内容,没有任何延迟或减速.....他们如何管理这个?你认为我可以用firebase实现这个功能吗?在这种情况下,您对防止聊天应用程序滞后有什么建议?感谢您的回复。
  • 是的,您可以使用 Firebase 实现此目的。互联网上有许多使用 Firebase 数据库的聊天应用示例。但是作为对您的问题的回答,我建议您尽量减少可以传输的数据量和连接数。仅同步数据库中的重要节点。希望我对您有所帮助。
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2016-04-01
相关资源
最近更新 更多