Android-Datenbank - Dieser Vorgang kann nicht ausgeführt werden, da der Verbindungspool geschlossen wurde

Ich habe ein seltsames Problem mit der Android-Datenbank und den Cursorn. Von Zeit zu Zeit (sehr selten) erhalte ich einen Absturzbericht von Kunden. Es ist schwer herauszufinden, warum es abstürzt, da ich ungefähr 150.000 aktive Benutzer habe und vielleicht 1 Bericht pro Woche oder so. Es ist also wirklich ein kleiner Fehler. Hier ist Ausnahme:

STACK_TRACE=java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348)
at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:834)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at sk.mildev84.agendareminder.a.c.a(SourceFile:169)

Bevor jeder Cursor "iteriert und erkundet", verwende ich diesen Code, um sicherzustellen, dass alles in Ordnung ist:

db = instance.getWritableDatabase();
cursor = db.rawQuery(selectQuery, null);

if (isCursorEmptyOrNotPrepared(cursor)) {
    ...
    }

private synchronized boolean isCursorEmptyOrNotPrepared(Cursor cursor) {
        if (cursor == null)
            return true;

        if (cursor.isClosed())
            return true;

        if (cursor.getCount() == 0) // HERE IT CRASHES
            return true;

        return false;
    }

Und es fällt auf Linie:

if (cursor.getCount() == 0)

Weiß jemand warum? Ich denke, ich überprüfe alle möglichen Ausnahmen und Bedingungen ... Warum stürzt meine App hier ab?

PS: Alle Datenbankmethoden sind synchronisiert und ich öffne und schließe die Datenbank / Cursor in allen Fällen korrekt. Ich habe es viele Male überprüft.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage