在Android中启用离线功能后,我们是否将所有Firebase数据作为缓存获取?

时间:2017-03-24 06:41:03

标签: android firebase firebase-realtime-database

我对Firebase android中的离线功能存有疑问。启用Firebase脱机功能后,

  

我们是否获取Firebase应用的所有数据,包括根数据或仅包含根数据   登录用户数据作为缓存

final FirebaseDatabase database = FirebaseDatabase.getInstance();
        if (database != null) {
            database.setPersistenceEnabled(true);
            database.getReference().keepSynced(true);
        }

我正在使用此代码段在Application类中启用脱机功能

2 个答案:

答案 0 :(得分:3)

在这里,我从Firebase Support Team

得到了我的问题的答案
  

实际上,主要原因是,我获取了所有数据(包括已登录的数据)   我的firebase应用程序的用户数据和所有其他用户数据)作为我的缓存   设备,因为我在数据库的根节点上使用了keepSynced()。

请查看以下代码段,我将其用于启用离线功能:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
    if (database != null) {
        database.setPersistenceEnabled(true);
        database.getReference().keepSynced(true);
    }

与上面的代码段一样,数据库引用引用了数据库的根节点。

现在,在这个数据库参考上,我使用 keepSynced()方法。因此,这会将所有数据保持同步作为设备中的缓存,这不是一件好事。

理想情况下,我们应该对我们的应用离线工作所需的 databaseReferences 使用 keepSynced()方法。

在上面的代码片段中,我犯了一个错误,即我在Application类上使用 setPersistenceEnabled()。我应该在我的启动器Activity类上移动它。

根据我上面的代码段,当app首次启动时,每次都会调用 setPersistenceEnabled()。这应该只在安装应用程序后使用一次。

我们可以像下面的代码段一样调用 setPersistanceEnabled()来调用它。

@Override
public void onCreate() {
  super.onCreate();
  if (!FirebaseApp.getApps(this).isEmpty()) {
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
  }
}

答案 1 :(得分:0)

阅读本文

  

通过启用持久性,Firebase实时数据库的任何数据   客户端将在线保持同步并且可用时进行同步   离线,即使用户或操作系统重新启动应用程序。

link