Mémoire insuffisante lors de l'allocation de curseurs

J'ai un problème de mémoire que je ne peux pas comprendre. J'ai une classe qui ne tous mes base de données de récupération de travail. L'erreur que j'ai est le suivant:

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

L'erreur d'allocation de mémoire se produit lorsque je fais ceci:

mDatabaseInterface.getGraphForLevel(level);

Je sais que c'est une fuite parce que j'ai appeler cette méthode à toutes les 2,5 secondes environ, et les 5 ou 6 premiers appels passer à travers facilement. Maintenant, voici les méthodes de mon DatabaseInterface classe:

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));
}

J'ai beaucoup de méthodes qui s'appellent les uns les autres, mais je sais que c'est pas un problème de récursivité parce que cette classe fonctionne dans une autre application. Ma principale question est pourquoi ne pas cursor.close() libérer le curseur? Si je fais quelque chose comme:

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

Est le curseur conservé dans ce cas?

Merci d'avance.

source d'informationauteur chopchop