移动光标时出现 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的主要内容,如果未能解决你的问题,请参考以下文章

在光标位置将文本插入文本区域时出现 IE 问题

android.database.sqlite.SQLiteException:在“Foreign”附近:语法错误(代码 1):

linux系统中vi点击上下左右键后出现ABCD,没有移动光标

鼠标卡顿原因分析 鼠标卡顿的几个原因

移动父视图时出现约束错误

结果集到 Android 光标