Android Room Database抛出“ CursorWindowAllocationException:光标窗口分配2048 kb失败”

时间:2019-07-31 14:04:34

标签: java android android-studio

我正在开发一个Android应用程序,其中我必须查询会议室数据库中表中的所有列和行,其中该行可能具有1到100000之间的行。在任何时候,我都需要所有行。应用在大多数情况下都可以正常运行,但几天后就会崩溃,但出现以下异常:

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=1 (# cursors opened by this proc=1)
    at android.database.CursorWindow.<init>(CursorWindow.java:108)
    at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)
    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)
    at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)
    at android.database.AbstractCursor.moveToNext(AbstractCursor.java:268)
    at android.arch.persistence.room.InvalidationTracker$1.checkUpdatedTable(InvalidationTracker.java:358)
    at android.arch.persistence.room.InvalidationTracker$1.run(InvalidationTracker.java:329)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)

打开的游标似乎没有任何问题,因为 Room 会自行处理。另外,打开游标的数量在例外中明确提到为1。

从日志中很明显, CursorWindow的大小为2 MB,并且由于超出查询大小而分配失败。但是,即使表只有几行,它有时也会失败。

我尝试使用注释@Transaction,但是我不确定注释是否成功。

在任何地方都可以解决此问题吗?请注意,我不是直接使用SQLITE 。是房间。另外,我没有在表中保存任何复杂数据

0 个答案:

没有答案