对一个元素的查询是否可能导致.CursorWindowAllocationException?

时间:2019-04-23 12:48:22

标签: android sql android-room

我的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

该表可以存储很多数据,例如数百万,但我只是在搜索一行。即使在这种情况下,也可能导致内存泄漏?有什么我可以做的吗?

1 个答案:

答案 0 :(得分:1)

  

我正在为FhirPackage上的每一行保存一个大字符串(大小为52802),但没有在该查询的where子句中使用它

您正在使用SELECT *,并且正在加入FhirPackage。因此,您将返回那个大字符串(以及联接表上的所有其他列),这可能会导致您的问题。

尝试将SELECT列列表限制为仅包含它们所需的表中所需的列。