【问题标题】:Firebase Realtime Database Android ChildEventListener FunctionalityFirebase 实时数据库 Android ChildEventListener 功能
【发布时间】:2022-01-19 01:18:05
【问题描述】:

为了减少数据传输(因为这会花费我们很多钱),我们正在更新 Firebase 实时数据库值侦听器以使用子侦听器。由于大多数字段不会更改,而更改最频繁的字段我们只关心某些应用程序状态,因此仅使用添加的子级和删除的子级侦听器似乎符合要求。

为 child_added 和 child_removed 添加侦听器似乎可以在 web 上完美运行。 iOS 似乎也是这样设置的,尽管我承认我还没有在那里测试过。然而,Android 似乎要求我们添加一个大型侦听器来侦听子移动和子更改。

据我了解,聆听这些主要违背了使用子侦听器而不是值侦听器的目的。由于任何时候孩子的任何数据发生变化(大部分时间我们都不关心),它会再次发送整个孩子的快照。我们试图通过仅监听添加/删除和特定情况下的子属性来避免数据传输,但这需要我们基本上一直监听所有这些?是否有另一种方法来实现这一点,以获得我所希望的?

总结我们的对象,我们有:

parent
--child A
----child A property 1
----child A property 2
--child B
----child B property 1
----child B property 2

等等。我们想知道何时添加或删除了一个孩子,但大多数时候我们并不关心保持孩子的属性更新,而是希望避免重新传输该数据。这是如何在 Android 上完成的(特别是使用 Java)?谢谢!

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    ValueEventListenerChildEventListener 用于数据库中的同一查询/路径时,它们传输的数据没有区别。

    如果您只想知道何时添加/删除子节点,而不想知道其内容,请考虑在树中添加一个额外的顶级分支,在其中仅保留子节点的键,然后 true作为它的值。

    【讨论】:

    • 很遗憾,我不控制数据,我只需要处理它。我可以尝试将其作为系统的补充,但最了解如何实施它的人不再在公司工作,所以它不会很有趣......因为 web 和 iOS 支持不同的个人听众子事件,Android 似乎也支持它是有意义的。也许下一个版本的增强?这让我们花了很多钱,我觉得其他人一定是在同一条船上。
    • 虽然 iOS 和 Android 的 API 确实不同,但传输的数据量没有区别。所有平台都将传输相同的(深度)数据,这就是有线协议的实现方式。如果您想检查,请在浏览器的“网络”面板中检查 Web Socket 框架,查看 Web 客户端的线路流量。
    • 这太令人失望了……我想我需要开始骚扰其他团队了。非常感谢您的澄清和建议!
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 2018-11-21
    • 2020-11-30
    • 1970-01-01
    • 2020-05-15
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多