如果数据量很大,Firebase addValueEvent侦听器会占用内存

时间:2018-05-29 11:04:57

标签: android firebase firebase-realtime-database

提前致谢。

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) 它阻止了用户界面,我无法执行点击操作一段时间。 请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

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