"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = "
。我让应用记录内存使用情况,并且当使用达到某个限制时,我就会得到这个错误,表明内存已经用完了。我的直觉告诉我,每次运行查询时,数据库引擎都会创建一个新的缓冲区(CursorWindow),即使我关闭了游标,既无法及时地释放内存,垃圾回收器也无能为力,
SQLiteDatabase.releaseMemory()
也无法快速释放内存。我认为解决方案可能在于“强制”数据库始终写入同一个缓冲区,而不是创建新的缓冲区,但我一直没有找到这样做的方法。我尝试过实例化自己的CursorWindow,并将SQLiteCursor设置为它,但没有成功。有什么想法吗?
编辑:根据@GrahamBorland的要求,提供示例代码:
public static CursorWindow cursorWindow = new CursorWindow("cursorWindow");
public static SQLiteCursor sqlCursor;
public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) {
query = "SELECT * FROM Items"; //would be more complex in real code
sqlCursor = (SQLiteCursor)db.rawQuery(query, null);
sqlCursor.setWindow(cursorWindow);
}
理想情况下,我希望在提供新查询之前能够使用 .setWindow()
并且每次获取新数据时都将数据放入同一个 CursorWindow
。