Android Firebase:对于通知,使用childEventLisetener还是SingleEvent?

Android Firebase:对于通知,使用childEventLisetener还是SingleEvent?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个android应用程序,使用Firebase作为后端。在我的数据库中,我有一个名为USER\u NOTIFICATIONS的部分,当用户的帖子受到欢迎时,该部分会填充一些信息 现在,在应用程序中,我应该在通知发生时触发一个ChildEventListener,还是应该在函数中设置一个SingleValueEventListener,并在Runnable中每隔20秒调用一次?在Runnable中运行SingleEventListener是否昂贵?我假设您希望应用程序响应数据库中的更改,在这

我有一个android应用程序,使用Firebase作为后端。在我的数据库中,我有一个名为
USER\u NOTIFICATIONS
的部分,当用户的帖子受到欢迎时,该部分会填充一些信息


现在,在应用程序中,我应该在通知发生时触发一个
ChildEventListener
,还是应该在函数中设置一个
SingleValueEventListener
,并在
Runnable
中每隔20秒调用一次?在
Runnable
中运行
SingleEventListener
是否昂贵?

我假设您希望应用程序响应数据库中的更改,在这种情况下,您应该使用
ChildEventListener
。您可以为4个操作指定不同的行为(
onchildeded
onChildChanged
onChildMoved
onChildRemoved
)。

侦听器的大部分资源使用来自它读取的数据。当您将侦听器附加到某个位置时,它将从该位置读取数据并触发相关事件

如果使用
addListenerForSingleValueEvent
,则仅此而已。但是,如果使用
addValueEventListener
addChildEventListener
,则侦听器将保持活动状态,并且如果随后更新数据,也将调用该侦听器

对一段永远不会改变的数据进行侦听是非常便宜的。但是,让侦听器监视频繁更改的数据的成本与数据大小更改的成本一样高


换言之:如果不了解以上所有内容,就无法知道该做什么。在不了解这些情况的情况下,我会选择最简单的方法,进行一些测量,并随着您对应用程序行为的更多了解进行优化。

我理解,但我不希望用户被通知轰炸。因此,如果我在
Runnable
中运行
SingleValueEvent
会很昂贵吗?这样做并不昂贵,生成的线程大部分都是空闲的。当不再需要处理程序来防止内存泄漏时,请小心清除它。如果不查看数据结构、侦听器代码、写入频率和每个增量的大小,就无法回答这个问题。这就是为什么我在下面描述了系统行为,希望它能让你自己为你的应用找到最好的方法。