【问题标题】:How long for addListenerForSingleValueEvent to update?addListenerForSingleValueEvent 更新多久?
【发布时间】:2023-02-01 12:45:57
【问题描述】:
Firebase 在实时数据库的 documentation 中描述了 3 种读取方法:
- get() 到达云端并获取一个值;
- addValueEventListener() 立即更新;和
- addListenerForSingleValueEvent() 更新,嗯,嗯,具体什么时候?
第三个选项“有效”,它得到更新,但什么时候?对它进行试验,我有时看到它在 2 分钟后更新,有时 30 分钟后,一旦我关闭笔记本电脑并上床睡觉,第二天又回来了,但它仍然没有。
有谁知道可以期待什么?
谢谢
【问题讨论】:
标签:
android
firebase
firebase-realtime-database
【解决方案2】:
在这里回复弗兰克,因为我的后续问题很长:
感谢您提供的出色链接。
我们使用 RTDB 作为后端(编写器)和移动设备(读取器)之间的总线。数据库很大,它的某些部分偶尔会发生变化(每天变化很少)。一个典型的客户端(移动设备)登录一次,我们就再也见不到他们了。有些人一个月出现一次,很少有人一周出现一次。很少有人会在 24 小时内出现两次。每当客户登录时,我们都希望他们看到最新的数据(请注意,我们的应用程序可能在后台,已登录。)
在会话期间,设备访问同一个 RDTB 点数十次/数百次。在实时会话期间,如果后端发生更改,我们别希望设备获得更新(后端更新可能是部分的,因此设备已知的数据可能变得不一致。)
从这个角度来看最小化网络成本(我们付给谷歌的),这样说对吗:
- get() 效率低下,因为它为同一条数据在网络中传输了 100 次。
- keepSynced() 是一个非常糟糕的主意,因为它使所有这些设备保持最新状态,即使它们永远不会再次使用该应用程序。
- addValueEventListener() 不是一个好主意,因为它使用设备不需要的(大量)数据更新设备;它中断了来自后端的(部分)更新的会话。
- addListenerForSingleValueEvent() 不是一个好主意,因为它不会更新...
那么,如果您同意,那么我们应该采用什么策略?
谢谢!