代码之家  ›  专栏  ›  技术社区  ›  JarsOfJam-Scheduler

如何与FireStore交互以减少客户端的RAM消耗?

  •  0
  • JarsOfJam-Scheduler  · 技术社区  · 5 年前

    我正在开发一个Android应用程序 使用 很多 数据 朝着 我的消防数据库。

    以下是我所做工作的概述。

    1. 用途: 我在文档和集合上设置了侦听器,并使用该方法 get ;

    2. 朝着用途 :我存储文档,使用和不使用 set ,我也更新文档。

    现在,每次我做这些被提及的动作时,我都会声明一个名为 SetupFirebaseFirestore . 这是一个 AsyncTask 它显示了FireStore。完成后,它还执行回调(在我声明时给出 设置FireBaseFireStore )

    您可以找到以下代码:

    public class SetupFirebaseFirestore extends AsyncTask<Void, Void, Void> {    
        private SetupFirebaseFirestorePostExecuteCallback post_execute_callback;
        private FirebaseFirestore db;
    
        public SetupFirebaseFirestore(SetupFirebaseFirestorePostExecuteCallback callback) {
            post_execute_callback = callback;
        }
    
        private void createFirebaseProducts() {
            db = FirebaseFirestore.getInstance();
            db.setFirestoreSettings(new FirebaseFirestoreSettings.Builder()
                    .setTimestampsInSnapshotsEnabled(true)
                    .build());
        }
    
        @Override
        protected Void doInBackground(Void[] params) {
            createFirebaseProducts();
            return null;
        }
    
        @Override
        protected void onPostExecute(Void result) {
            post_execute_callback.onTaskCompleted(db);
        }
    }
    

    问题和问题

    问题是我的应用程序交互 很多 带消防器材。因此,有许多关于FireStore的声明,以及大量的RAM消耗。

    顺便说一下,我打电话给FireStore后,它可能会超载。 getInstance() build() ?

    如何在RAM消耗方面做一些更干净的事情?我应该使用单件模式吗? 它允许我设置一次FireStore,同样也允许我设置它的设置。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Alex Mamo    5 年前

    FireBase数据库客户端已运行 全部的 后台线程中的网络操作。这意味着所有操作都在不阻塞主线程的情况下进行。将操作放入 AsyncTask 不提供任何额外福利。更进一步,实例化 FirebaseFirestore 里面的物体对你一点帮助都没有。当您与云FireStore数据库交互时,应用程序与FireBase服务器之间的套接字连接将打开。从那一刻起,应用程序和数据库之间的所有通信都会经过同一个套接字。所以不管你打多少次电话 getInstance() ,您将始终拥有单一连接。

    如果一段时间内没有活动的侦听器,则云FireStore客户端将自动关闭连接,但当您附加侦听器或再次执行读/写操作时,它将重新打开连接。

    因此,无论您获得连接的次数或拥有多少个侦听器,都与您在客户端处理的数据量有关。回答你的问题:

    如何与FireStore交互以减少客户端的RAM消耗?

    减少在单个查询中获取的文档数。查询性能取决于您请求的项目数,而不是您请求它们的项目数。要获得更小的数据块,请参见: