Ich benutze eine SQLite-Datenbank und bekomme regelmäßig Laufzeitfehler, die ich nicht finden kann. Nach einer Abfrage verwende ich moveToFirst
, um auf den ersten abgerufenen Datensatz zu verweisen, und dies löst manchmal eine android.database.CursorWindowAllocationException
-Ausnahme aus. Zu dieser Ausnahme wird der folgende Satz hinzugefügt: "Die Cursorfensterzuordnung von 2048kb ist fehlgeschlagen. # Öffnen Sie Cursors = 736 (#cursors, die dieses proc = 736 öffnen)".
In der Android-Dokumentation habe ich noch nichts in Bezug auf diese Ausnahme gefunden. Weiß jemand, dass es eine Ursache und eine Möglichkeit ist, es zu vermeiden?
Dieser Fehler ist fast immer darauf zurückzuführen, dass ein Cursor nicht geschlossen wird, wenn er fertig ist. Jedes Mal, wenn Sie einen Cursor öffnen, muss der Speicher die Daten darstellen, die der Cursor darstellt, und dieser Speicher kann nicht freigegeben werden, bis der Cursor geschlossen ist. Der für diesen Zweck verfügbare Speicher ist begrenzt. Wenn also Cursor nicht geschlossen werden und eine Anwendung weiterhin neue öffnet, tritt dieser Fehler wahrscheinlich irgendwann auf.
Ich empfehle Ihnen, Ihren Code zu überprüfen, um sicherzustellen, dass alle erstellten Cursor irgendwann geschlossen werden. Achten Sie auch auf jeden Code, der einen Cursor innerhalb einer Schleife öffnet - Ihre Fehlermeldung lautet 'open Cursors = 736', was eine Menge Cursor-Aktivitäten innerhalb einer Schleife nahelegt.