андроид.база данных.CursorWindowAllocationException при перемещении курсора


Я использую базу данных SQLite, и я регулярно получаю ошибки во время выполнения, которые не могу найти источник. После запроса я использую moveToFirst, чтобы указать на первую полученную запись, и это иногда вызывает исключение android.database.CursorWindowAllocationException. К этому исключению добавляется следующее предложение: "выделение окна Курсора 2048kb не удалось.# open Cursors=736 (#cursors opendby this proc=736)".

В документации по Android я пока не нашел ничего, связанного с этим исключением. Кто-нибудь знает, что это причина и ... как этого избежать?

1 10

1 ответ:

Эта ошибка почти всегда возникает из-за того, что курсор не закрывается, когда он закончен. Каждый раз, когда вы открываете курсор, требуется память для отображения данных, которые представляет курсор, и эта память не может быть освобождена до тех пор, пока курсор не будет закрыт. Существует ограничение на объем памяти, доступной для этой цели, так что если курсоры не закрыты и приложение продолжает открывать новые, эта ошибка, вероятно, произойдет в какой-то момент.

Я рекомендую вам изучить ваш код, чтобы убедиться, что все созданные курсоры в какой-то момент закрываются. Также будьте осторожны с любым кодом, который открывает курсор в цикле - ваше сообщение об ошибке говорит "open Cursors=736", что предполагает большую активность курсора в цикле.