【发布时间】: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