在Android SQLite中,直接使用Cursor比创建模型对象更节省内存?
作者:互联网
在大多数Android示例代码中,从SQLite数据库填充ListView有两种方式,
>将数据预取到List – 执行查询,为每行创建Model对象,然后将其添加到List并关闭Cursor,然后使用List填充ListView.
>没有List和Model对象 – 执行查询并按照Cursor使用moveToFirst,moveToLast,move,根据需要填充ListView.
现在我想知道,在Android中,上述哪种方法的内存效率更高?
解决方法:
Cursor方法更节省内存:
假设您的数据库中有1000个条目,并且您有一个可以同时显示10个条目的ListView.如果你首先创建一个列表,你将不得不创建1000个模型对象(每个对象由几个对象组成,具体取决于表的列数),listview创建额外的10个视图(实际上还有一些,取决于在列表的布局上)用于显示10个项目.现在,当用户滚动列表时,在适配器中最终将模型对象中的数据复制到当前视图中的列表项视图.
另一方面,如果您使用CursorAdapter,每当您必须使用数据填充列表项时,您将获得Cursor,其中包含该行的数据,您只需选择实际需要的列数据即可.显示在列表项中.无需创建1000个模型对象.
从代码可读性的角度来看,模型方法会更好,因为使用Cursors的级别很低,您需要知道数据库中列的名称等等.
标签:android,android-listview,android-sqlite,android-cursor,android-memory 来源: https://codeday.me/bug/20190609/1206824.html