【问题标题】:Handling keepSynced() while on background on Android and with FCM在 Android 和 FCM 的后台处理 keepSynced()
【发布时间】:2017-02-14 03:06:34
【问题描述】:

我正在考虑将 keepSynced() 用于 Firebase 实时数据库中的一些数据。我知道它会自动同步这些路径。但这与 Android 生命周期有何关系?如果用户离开所有活动(并且所有正常侦听器断开连接),它会停止同步吗?我不希望应用成为数据或电池消耗者。

另一方面,我想在 FCM 通知到达时更新缓存数据。我可以启动一些将连接到 Firebase 的服务。我想同步keepSynced() 中的所有路径,并在同步时停止它。我不确定如何实现这一目标。为其中一个路径创建一个侦听器并保持服务运行一段时间?服务结束后会停止同步吗?

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-cloud-messaging


    【解决方案1】:

    firebaser 在这里

    好问题!

    当没有活动的活动时,操作系统可能会随时关闭与 Firebase 数据库的连接。我们的 SDK 不会尝试阻止这种情况,但在应用再次激活时重新连接。

    您在第二段中描述的是我们所说的“推送同步”,您在其中发送推送通知(通常是静默 FCM 数据消息)以触发数据同步。

    我们在去年的 I/O 应用程序中做了类似的事情,虽然它比我们希望的要复杂一些,但效果很好。在这种情况下,我们明确地管理了连接,调用了goOnline()goOffline()(在 iirc 5 分钟后)。主同步码可以在the IOSched github repo找到。

    【讨论】:

    • 感谢您的回答,很有帮助。我有两个后续问题:1)您说“系统可能随时关闭连接”。没关系,但是根据经验,您知道这通常需要多长时间吗?或者更重要的是,这可能是一个问题(通过电池和数据消耗来衡量)2)所以如果我启动一个后台服务,在那里调用 goOnline(),然后在 5 分钟后调用 goOffline(),它将同步标记为 keepSynced 的路径()?
    • 1) 不,我从来没有得到一个像样的指标。 2) 我确实认为我们在 IOSched 中确实做到了这一点,但我现在找不到它的具体代码。 :-/
    • 2) 好的,我会做一些实验告诉你。
    • 好的,所以我做了一些实验,效果很好。当通知到达时,我在我感兴趣的路径上调用 goOnline() 和 keepSynced()。它在后台正确同步,当我打开应用程序时,我看到了新数据。如果系统正在管理自动关闭连接而对电池或数据没有任何重大影响(根据您之前的回答),我不必调用 goOffline()。对吗?
    • 在某个位置使用keepSynced(true) 确实可以保持连接打开,除非您调用goOffline() 或操作系统关闭套接字。但我不会只依赖那里的 Android,因为它可能会使连接打开很长一段时间。您的应用对何时完成检索数据有更好的了解,因此可以更好地决定何时下线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 2016-12-14
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多