gpt4 book ai didi

android - 房间数据库抛出CursorWindowAllocationException

转载 作者:行者123 更新时间:2023-11-29 02:25:42 25 4
gpt4 key购买 nike

最近,我开始面对这个例外。据我所知,在事务处理后未关闭游标时会抛出此异常。但是,Room数据库在自动生成的DaoImpl代码中处理此问题。
我无法找出导致此异常的原因。这是堆栈跟踪:

Fatal Exception: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. 
at android.database.CursorWindow.(CursorWindow.java:108)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:226)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:148)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:142)
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:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)


这是查询:

    @Query("select * from PhoneEvent where event_type=:type and 
client_created_timestamp>=:startTimestamp and
client_created_timestamp<:endTimestamp")
List<PhoneEvent> getAllPhoneEventsOfTypeAndBetween(String type,
long startTimestamp, long endTimestamp);


在Dao_Impl中,此行引发异常:

    final List<PhoneEvent> _result = new ArrayList<PhoneEvent>(_cursor.getCount());

最佳答案

海事组织

异常意味着您的进程无法分配2MB的缓冲区。这通常表示内存泄漏,并且它是在游标中发生的,因为当您的内存几乎快用完时,大的游标分配比某些微小的其他对象更有可能失败。

我的解决方案:用@Transaction注释查询,然后尝试。

希望它能工作!

关于android - 房间数据库抛出CursorWindowAllocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52384715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com