База данных Android - Невозможно выполнить эту операцию, поскольку пул соединений закрыт

У меня странная проблема с базой данных Android и курсорами. Время от времени (очень редко) случается, что я получаю отчет о сбое от клиентов. Трудно понять, почему происходит сбой, поскольку у меня ~ 150 000 активных пользователей и, возможно, 1 отчет в неделю или около того, так что это действительно небольшая ошибка. Вот исключение:

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)

Перед каждым курсором, «перебирающим и исследующим», я использую этот код, чтобы убедиться, что все в порядке:

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

И это попадает в строку:

if (cursor.getCount() == 0)

Кто-нибудь знает почему? Я думаю, я проверяю все возможные исключения и условия ... Почему мое приложение падает здесь?

PS: Все методы базы данных синхронизированы, и я правильно открываю и закрываю базу данных / курсоры во всех случаях, я проверял это много раз.

Ответы на вопрос(4)

Ваш ответ на вопрос