我有一个应用程序,当用户的帖子被点赞时,我希望用户收到通知。
我可以使用 ChildValueEventListener
但这太快了。
我不希望用户每次点赞时都会受到通知的轰炸。因为如果另一个用户不断地“喜欢”和“不喜欢”某个帖子,帖子作者用户将受到通知的轰炸。
我的计划是在 Runnable/Handler 中运行 SingleValueEventListener
并每 20 秒检查一次通知。像下面这样:
Handler handler = new Handler();
int delay = 20000; // 20 seconds
handler.postDelayed(new Runnable(){
public void run(){
databaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("USER_NOTIFICATION") {
// new notification exists - alert user
}
handler.postDelayed(this, delay);
}
}, delay);
我有两个问题。 1)这样做可以吗?我的意思是,每 x 秒获取数据是否昂贵? 2) 是否可以在 Service
中运行该代码,以便即使应用程序关闭或终止,用户仍然可以获得通知?
最佳答案
您一下子就否定了 Firebase 数据库的最大优势(实时更新),并重新引入了它所解决的一大劣势(每次您现在都会下载所有数据,而不是仅进行增量更新)。
您可能最好不要限制在客户端代码中向用户显示的更改数量。因此,请使用常规的 ChildValueEventListener
并简单地限制客户端上的更新。
例如
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
if (System.currentTimeMillis() - lastShownTimestamp > 20000) {
// TODO: show latest data on screen
lastShownTimestamp = System.currentTimeMillis();
}
}
关于java - 在可运行中获取 firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49312573/