我的crashlytics刚收到此错误:
Non-fatal Exception: android.database.CursorWindowAllocationException: Cursor window allocation of 4194304 bytes failed.
at android.database.CursorWindow.<init>(CursorWindow.java:136)
at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:315)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:155)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:149)
但是我的查询仅检索一个元素
SELECT * FROM Monitoring M JOIN FhirPackage F ON M.id=F.monitoringId WHERE uploadedToDeviceCentral = 0 AND F.readyToUpload = 1 AND M.userId=:userId AND M.organizationId=:orgId ORDER BY startTimestamp LIMIT 1
该表可以存储很多数据,例如数百万,但我只是在搜索一行。即使在这种情况下,也可能导致内存泄漏?有什么我可以做的吗?
答案 0 :(得分:1)
我正在为FhirPackage上的每一行保存一个大字符串(大小为52802),但没有在该查询的where子句中使用它
您正在使用SELECT *
,并且正在加入FhirPackage
。因此,您将返回那个大字符串(以及联接表上的所有其他列),这可能会导致您的问题。
尝试将SELECT
列列表限制为仅包含它们所需的表中所需的列。