移动光标时的android.database.CursorWindowAllocationException

时间:2014-01-19 15:57:44

标签: java android cursor sqlite

我正在使用SQLite数据库而且我经常遇到运行时错误,我无法找到它的起源。在查询之后,我使用moveToFirst指向检索到的第一条记录,这有时会触发android.database.CursorWindowAllocationException异常。添加到此异常的是以下句子:“2048kb的游标窗口分配失败。#open Cursors = 736(#procors opendby this proc = 736)”。

在Android文档中,我还没有找到任何与此异常相关的内容。有谁知道它的原因和避免它的方法?

1 个答案:

答案 0 :(得分:29)

此错误几乎总是由于光标在完成时未关闭。每次打开游标时,都需要内存来映射游标所代表的数据,并且在游标关闭之前不能释放内存。可用于此目的的内存量有限,因此如果游标未关闭且应用程序继续打开新的,则可能会在某个时刻发生此错误。

我建议您检查一下代码,以确保在某些时候关闭所有创建的游标。还要注意在循环中打开游标的任何代码 - 您的错误消息显示'open Cursors = 736',这表示在某种循环中有很多游标活动。