在Android SQLite中,直接使用Cursor比创建模型对象更节省内存?

4 android android-listview android-cursor android-sqlite android-memory

在大多数Android示例代码中,从SQLite数据库填充ListView有两种方式,

  1. 预取数据,以列表-执行查询,对于每一行创建模型对象,然后将其添加到列表关闭光标,然后填充ListView控件列表.

  2. 没有List和Model对象 -执行查询并按照Cursor使用moveToFirst,moveToLast,move,根据需要填充ListView.

现在我想知道,在Android中,上述哪种方法的内存效率更高?

Rid*_*lly 5

Cursor方法具有更高的内存效率:

假设您的数据库中有1000个条目,并且您有一个可以同时显示10个条目的ListView.如果你首先创建一个列表,你将不得不创建1000个模型对象(每个对象由几个对象组成,具体取决于表的列数),listview创建额外的10个视图(实际上更多,取决于在列表的布局上)用于显示10个项目.现在,当用户滚动列表时,在适配器中最终将模型对象中的数据复制到当前视图中的列表项视图.

另一方面,如果你使用a CursorAdapter,每当你必须用数据填充列表项时,你会得到Cursor,它确切地保存了该行的数据,你可以简单地选择你实际需要显示的列的数据在列表项中.无需创建1000个模型对象.

从代码可读性的角度来看,模型方法会更好,因为使用Cursors的级别很低,您需要知道数据库中列的名称等等.