移动游标时android.database.CursorWindowAllocationException


问题内容

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

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


问题答案:

此错误几乎总是归因于结束时没有关闭游标。每次打开游标时,都需要使用内存来映射游标表示的数据,并且直到关闭游标后才能释放该内存。可用于此目的的内存量受到限制,因此,如果未关闭游标,并且应用程序继续打开新的游标,则可能会在某个时候发生此错误。

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