移动光标时出现 android.database.CursorWindowAllocationException
Posted
技术标签:
【中文标题】移动光标时出现 android.database.CursorWindowAllocationException【英文标题】:android.database.CursorWindowAllocationException when moving a Cursor 【发布时间】:2014-02-08 17:45:07 【问题描述】:我正在使用 SQLite 数据库,并且经常遇到无法找到来源的运行时错误。查询后,我使用moveToFirst
指向检索到的第一条记录,这有时会触发android.database.CursorWindowAllocationException
异常。添加到这个例外的是以下句子:“2048kb 的光标窗口分配失败。# open Cursors=736 (#cursors opendby this proc=736)”。
在 Android 文档中,我还没有找到与此异常相关的任何内容。有谁知道它的原因和避免它的方法吗?
【问题讨论】:
【参考方案1】:这个错误几乎总是由于游标完成后没有关闭。每次打开游标时,都需要内存来映射游标所代表的数据,并且在游标关闭之前无法释放内存。用于此目的的可用内存量是有限制的,因此如果游标未关闭并且应用程序继续打开新游标,则可能会在某个时候发生此错误。
我建议您检查您的代码,以确保创建的所有游标都在某个时候关闭。还要注意在循环中打开游标的任何代码 - 您的错误消息显示“open Cursors=736”,这表明在某种循环中存在大量游标活动。
【讨论】:
好点。这帮助我找到了一个粗心的错误,即使用带光标的双循环。纯粹的破坏。 这也发生在我身上,但它显示为Open Cursors=2
,并且我只在旧游标从isClosed()
报告错误时才查询新游标……这很奇怪。
同样的问题发生在我身上,我可以看到Open Cursors =1
。任何人的任何提示?
可能是某种OutOfMemoryError
?
在queryBuilder.query()的情况下如何关闭游标; ?以上是关于移动光标时出现 android.database.CursorWindowAllocationException的主要内容,如果未能解决你的问题,请参考以下文章
android.database.sqlite.SQLiteException:在“Foreign”附近:语法错误(代码 1):