我将ChildEventListeners添加到实时数据库中的多个节点。节点可以嵌套也可以不嵌套。我遇到的问题是,如果同时更改其中一些节点,onChildChanged事件处理程序似乎在排队。 我同时在循环中将事件监听器添加到node_a,node_b,node_c等,如下所示:
FirebaseDatabase.getInstance().getReference(node).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但是如果node_a在node_b之前发生更改,则在完成对node_a的任何处理之前,不会触发node_b的onChildChanged处理程序。
这是预期的行为吗?我以为他们会同时开火。
答案 0 :(得分:1)
这是预期的。有一个线程可以管理从数据库更改中的所有回调。如果你想要并行处理,你必须将工作传递给其他线程,以释放最初调用你的监听器的单个线程。
答案 1 :(得分:0)
如果node_a在node_b之前更改,则node_b的onChildChanged处理程序不会被触发,直到对node_a的任何处理完成为止。
这是预期的。即使您附加了ChildEventListener
,Firebase服务器也会将该位置的所有更改(您的.getReference(node)
)一次性发送到客户端。 SDK在处理来自服务器的任何其他更新之前处理这些更改并调用相关的侦听器方法。