【发布时间】:2019-02-06 12:24:05
【问题描述】:
我正在编写 Android 应用程序 - 用户可以跟踪其他人的位置。每个用户每 5 秒发送一次他们的 gps 坐标,但是每次将位置保存在数据库中时都会获取有关其他用户的数据,因此 firebase 在侦听器中触发 onChildChanged 函数。我也想每 5 秒获取一次数据,否则会很昂贵。
假设我们有三个用户使用我的应用:
用户 A 在 5:00:03 开始发送他的位置。 用户 B 在 5:00:06 开始发送他的位置 - 比用户 A 晚了三秒。
用户 A 在 5:00:08 更新坐标,用户 B 在 5:00:11 执行相同操作。
用户 C 在 5:00:00 开始监听位置变化。 在 5:00:03 - 接收有关用户 A 的更新。 在 5:00:03 - 接收有关用户 B 的信息。 5:00:08 - 接收有关用户 A 的更新。 5:00:11 - 接收用户 B 的信息。
在 11 秒内用户 C 收到许多更新,当任何用户的位置发生变化时,用户 C 的应用程序上的函数 onChildChanged 每次都会工作。
预期的行为是这样的:
5:00:00 - 用户 C 开始收听。 5:00:05 - 用户 C 收到关于用户 A 位置的信息。 5:00:10 - 用户 C 收到关于用户 A 和用户 B 的信息。
所以我需要每 5 秒接收一次数据,而不是每次数据更改。
我想知道,我必须每五秒添加一次新的侦听器,然后获取数据,然后删除侦听器?还是我需要使用 firebase 功能?
【问题讨论】:
-
您是否有理由不想使用侦听器来检查孩子的变化?
-
Firebase 使用实时数据库。这意味着 Firebase 数据库中的任何修改都会同时反映到您的应用中。
-
是的,如果超出查询限制,Firebase 会很昂贵。
-
为什么不每 5 秒向 Firebase 写入人员位置信息,这样每 5 秒触发一次
onDataChange? -
@DanielKozak 您似乎知道 Firebase 将如何处理您的用例,而这里的其他人要么不理解,要么不同意。你能做的最好的事情就是在代码中展示一个简单版本的监听器是如何工作的,然后表达你对该代码的关注。这样我们都在查看代码,并且可以对代码进行推理,而不是抽象地讨论行为。
标签: android firebase firebase-realtime-database