java - 在可运行中获取 firebase 数据

标签 java android firebase firebase-realtime-database

我有一个应用程序,当用户的帖子被点赞时,我希望用户收到通知。 我可以使用 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/

相关文章:

android - 如何使用 Android 获取 Firebase 数据库中的值?

javascript - 如何从另一个函数内部的 firebase 函数内部访问一个函数

java - 如何使用线程在不同系统中运行同一个java项目

Android Couchdb - libcouch 和 IPC Aidl 服务

android - 在没有 Google API 构建的情况下让 Google Maps API 在 Android 上运行

java - 使用 OpenCV 在 Android 上进行数字识别的训练数据

ruby - Cocoapods 安装错误 mkmf.rb 找不到 ruby​​ 的头文件

java - 在 java 中读取和获取 xml 值

java - 从 Java PrintService 获取打印机状态

java - 如何从 Mongo Document 转换为 java Set<String>?