【问题标题】:Firebase addValueEvent listener consuming memory if data is in large amount如果数据量很大,Firebase addValueEvent 侦听器会消耗内存
【发布时间】:2018-05-29 20:55:14
【问题描述】:

提前致谢。

global.getDatabaseReference().child(ApplicationConstants.TOPIC_DB).child(Util.getSelectedBoard(context)).child(Util.getSelectedClass(context)).child(Util.getSelectedLanguagePackage(context)).child("CategoryId_1").child(subject).child(ApplicationConstants.TOPICS).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                try {

                    topicContentArrayList = new ArrayList<>();
                    HashMap<String, HashMap<String, String>> modelHashMap = null;
                    int pos =0;
                    for (DataSnapshot single_ : dataSnapshot.getChildren()) {
                        modelHashMap = new HashMap<>();
                        HashMap<String, String> innerTopicNode = (HashMap<String, String>) single_.getValue();

                        innerTopicNode.put("mastery", "0");
                        innerTopicNode.put("enabled", innerTopicNode.get("Display"));
                        innerTopicNode.put("currentLevel", "1");
                        innerTopicNode.put("flag", "Done");
                        innerTopicNode.put("score", "0");

                        modelHashMap.put(pos + "", innerTopicNode);
                        pos++;
                        topicContentArrayList.add(modelHashMap);

                    }
                                     } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                Util.dismissdataDialog();
            }
        });

这是内存错误 后台部分并发标记扫描 GC 释放 277003(9MB) 它阻塞了 UI,我有一段时间无法执行点击操作。 请帮助我摆脱这个问题。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    这是您尝试获取大量数据时的正常行为。如果您想避免这样的错误,您应该考虑以小块的形式加载数据。为此,您可以使用 Firebase 提供的方法之一filter your data

    【讨论】:

    • 你试过我上面的解决方案,一切都好吗?
    • 感谢 Alex 的回答,但它不符合我的要求。这现在工作正常,但另一个问题是如果我必须在大小为 50 的循环中调用上述代码怎么办。在这种情况下,它会阻塞 UI。
    • 如果您遇到其他问题(除此之外),请发布另一个新问题,以便我和其他用户可以帮助您。关于这个问题,您是否尝试过以小块的方式加载数据?另请注意,Firebase 数据库客户端已在后台线程中运行所有网络操作。这意味着所有操作都不会阻塞您的主线程。您认为我的回答对您最初的问题有帮助吗?
    • 没有。这并没有帮助我摆脱困境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2014-01-04
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多