在大多数 Android 示例代码中,通过两种方式从 SQLite 数据库填充 ListView,
Prefetch data to List - 执行查询,为每一行创建 Model 对象,然后将其添加到 List 并关闭 光标,然后用 List 填充 ListView。
没有 List 和 Model 对象 - 使用 moveToFirst 跟随 Cursor 执行查询并填充 ListView>、moveToLast、根据需要移动。
现在我想知道,在 Android 中,上述哪种方法的内存效率更高?
最佳答案
Cursor
方法的内存效率更高:
假设您的数据库中有 1000 个条目,并且您有一个可以同时显示 10 个条目的 ListView。如果你首先创建一个列表,你将不得不创建 1000 个模型对象(每个模型对象又由几个对象组成,具体取决于你的表的列数)并且 ListView 创建额外的 10 个 View (实际上更多,取决于在列表的布局上)用于显示 10 个项目。现在,当用户滚动列表时,在您的适配器中,您最终会将数据从您的模型对象复制到当前在 View 中的列表项 View 。
另一方面,如果您使用 CursorAdapter
,每当您必须用数据填充列表项时,您会得到一个 Cursor,该 Cursor 正好保存该行的数据,您可以简单地选择您实际需要在列表项中显示的列的数据。无需创建 1000 个模型对象。
从代码可读性的角度来看,模型方法会更好,因为使用 Cursors 的级别非常低,您需要知道数据库中列的名称等等。
关于android - 在 Android SQLite 中,直接使用 Cursor 比创建模型对象更节省内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26943924/