android.database.CursorWindowAllocationException: выделение окна курсора 2048 КБ не удалось даже после закрытия курсора

Есть много вопросов на SO о CursorWindowAllocatoinException:

Ошибка выделения окна курсора базы данных Android SQLite размером 2048 КБНе удалось выделить CursorWindowНедостаточно памяти при выделении курсоровСбой Android SQLite CursorWindowAllocationException

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

String query = "select serial from tbl1 union select serial from tbl2 union select serial from tbl3";
    SQLiteDatabase db = null;
    Cursor cur = null;
    try {
        SettingsDatabaseHelper dal = new SettingsDatabaseHelper(
                c);
        db = dal.getReadableDatabase();
        cur = db.rawQuery(query, null);
        int numRows = cur.getCount();
        if (numRows > 0) {
            cur.moveToFirst();

            int serialIdx = cur.getColumnIndexOrThrow("serial");
            for (boolean hasItem = cur.moveToFirst(); hasItem; hasItem = cur
                    .moveToNext()) {

                String serial = cur.getString(serialIdx);
                if (Validator.getInstance().isValidSerial(serial))
                    serials.add(serial);

            }
        }
    } finally {
        if (cur != null)
            cur.close();

        if (db != null)
            db.close();
    }

Я запускаю этот метод каждые несколько секунд. Через полчаса я получаюCursorWindowAllocationException вint numRows=cur.getCount(); и тогда мой сервис останавливается.

Так как я закрываю курсор, может быть проблема с моим классом Helper. Вот код:

public class SettingsDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydb.db";
    private static final int DATABASE_VERSION = 1;


    private static final String TBL_CREATE="create table...";



    public SettingsDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(TBL_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onCreate(db);
    }
}

Как я могу предотвратить выброс этого исключения?

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

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