Brak pamięci podczas przydzielania kursorów

Mam problem z pamięcią, którego nie mogę zrozumieć. Mam jedną klasę, która działa, pobierając całą moją bazę danych. Błąd, jaki mam, jest następujący:

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=733 (# cursors opened by this proc=733)

Błąd przydziału pamięci występuje, gdy to robię:

mDatabaseInterface.getGraphForLevel(level);

Wiem, że to przeciek, ponieważ nazywam tę metodę co 2,5 sekundy mniej więcej, a 5 lub 6 pierwszych połączeń przechodzi łatwo. Oto metody w mojej klasie DatabaseInterface:

public Graph getGraphForLevel(Level level) {

    //get the nodes
    ArrayList<Node> nodes = new ArrayList<Node>(Arrays.asList(this.getNodesWithLevel(level)));
    //get the edges
    ArrayList<Edge> edges = new ArrayList<Edge>(Arrays.asList(this.getEdgesWithNodes(nodes)));

    return new Graph(nodes, edges);
}

public Node[] getNodesWithLevel(Level level) {

    List<Node> l = new ArrayList<Node>();

    Cursor cursor = mDatabase.query("nodes", null, 
            "level = " + wrapSql(String.valueOf(level.getId())), null, null, null, null);

    while (cursor.moveToNext()) {
        l.add(parseNodeFromCursor(cursor));
    }

    cursor.close();

    return l.toArray(new Node[l.size()]);       
}

private Node parseNodeFromCursor(Cursor cursor) {

    Level l = getLevelWithId(cursor.getInt(2));

    return new Node(cursor.getInt(0), cursor.getString(1), l, 
            cursor.getInt(4), cursor.getInt(5));
}

Mam wiele metod, które się nazywają, ale wiem, że nie jest to problem rekursji, ponieważ ta klasa działa w innej aplikacji. Moje główne pytanie brzmi: dlaczego niecursor.close() wyzwolić kursor? Jeśli zrobię coś takiego:

cursor = mDatabase.query(...);
cursor.moveToNext();
Node node = new Node(cursor.getInt());
cursor.close();

Czy kursor jest w tym przypadku zachowany?

Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion