关于ZAKER 融媒体解决方案 合作 加入

android – Firebase:setPersistenceEnabled 和 keepSy.

CocoaChina 09-18

我以为我使用以下所有聊天对话数据的时间都可以随时离线使用 . 以某种方式不是 , 所有节点都从服务器加载 .

FirebaseDatabase.getInstance ( ) .setPersistenceEnabled ( true ) ;

然后 , 根据 DOCS:

Persistence Behavior : By enabling persistence, any data that we sync while online will be persisted to disk and available offline, even when we restart the app. This means our app will work as it would online using the local data stored in the cache.

如果 setPersistenceEnabled ( true ) 时数据已经脱机可用 ; , 为什么我需要 keepSynced ( true ) ?

DatabaseReference r = FirebaseDatabase.getInstance ( ) .getReference ( "chat/roomid" ) ;r.keepSynced ( true ) ;

最佳答案

应用中的 Firebase 数据库客户端可以将数据从数据库保存在两个位置:内存和 / 或磁盘上 .

> 附加侦听器时 , 它会将数据库中的数据同步到应用程序中的内存表示形式 .

> 如果启用了持久性 , 则数据也会自动保留在磁盘上 .

> 从位置分离最后一个侦听器时 , 将从内存中刷新该位置的数据 . 但它不会从磁盘中删除 .

当您保持位置同步时 , 客户端实际上会将空侦听器附加到该位置 . 因此 , 应用程序中的数据将始终与服务器上的数据库中的数据保持同步 ( 只要存在网络连接 ) . 如果您尚未启用持久性 , 则数据将在内存中保持最新 . 如果您启用了持久性 , 它也将在磁盘上保持最新 .

尽管将 keepSynced 与持久性一起使用是最常见的 , 但也存在没有持久性的用例 .

例如 , 如果您有一个主 – 详细信息应用程序 , 您经常从项目名称列表中跳出到每个项目的详细信息 . 在这种情况下 , 保持项目名称列表同步将使您不必在用户从详细信息屏幕返回时重新加载该数据 .

你当然也可以简单地在数据上保留一个监听器 , 这实际上就是 keepSynced 在幕后所做的事情 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 数据库weandroid