【问题标题】:Will Firebase Realtime Database Sync when the device comes online, But the Application is not opened?设备上线但应用程序未打开时,Firebase 实时数据库会同步吗?
【发布时间】:2017-12-08 11:41:59
【问题描述】:

我正在试用 Firebase 实时数据库。我创建了一个节点users,其中我创建了一个节点user_1。 JSON 如下所示

{
  "user_1" : {
    "firstName" : "User",
    "lastName" : "Last",
    "middleName" : "S"
  }
}

我已为该特定节点 user_1 启用离线持久性和同步。

FirebaseDatabase.getInstance().setPersistenceEnabled(true);
FirebaseDatabase.getInstance().getReference().child("users").child("user_1").keepSynced(true);

首先,我打开应用程序并同步user_1 数据。然后我杀死了应用程序,但设备仍然连接到互联网。我对 Firebase 控制台中的 user_1 节点进行了更改。一段时间后,我已断开与互联网的连接。我再次打开应用程序,听那个节点user_1。但离线数据不会与 Firebase Server 的最新数据同步。这是否意味着,keepSynced() 仅在应用程序处于前台时才有效?

【问题讨论】:

  • 是的,因为 FirebaseDatabase.getInstance() 已映射到您的应用程序类,并且当您终止应用程序时,firebase 不会收到任何回调。请转至此link
  • 你在哪里移除监听器?
  • 我正在删除应用程序中的监听器,但是从文档中,我理解的是,如果我们使用 keepSynced(true),那么数据应该在没有任何监听器的情况下同步
  • @AlexMamo keepSynced(true) 实质上在引用/查询上设置了一个空侦听器。你通常不会删除它。
  • @FrankvanPuffelen 我明白了,因为它是空的,不需要删除。谢谢!

标签: android firebase firebase-realtime-database


【解决方案1】:

当您调用 keepSynced(true) 时,Firebase 实时数据库客户端会在您的应用处于活动状态时同步该位置的数据。

如果您强制终止应用,客户端将不再处于活动状态,也不再同步。

当您的背部进入后台时,它可能会继续同步一段时间。是否这样做以及持续多长时间取决于 Android 版本和设备制造商。鉴于他们努力减少后台数据使用(以延长电池寿命),我建议不要依赖这个。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多