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