房间DAO光标更换

时间:2018-06-02 11:56:10

标签: android android-room android-cursor

目前我正在重构一个旧项目并决定使用Room DAO。该项目使用Cursor显示一长串实体。好的房间DAO有能力返回光标。

@Query("SELECT * FROM user")
public Cursor loadUsers();

但官方文件阻止我们使用它

  

警告:非常不鼓励使用Cursor API,因为   它不能保证行是否存在或行的值是什么   包含。仅当您已有代码时才使用此功能   期待一个光标,你不能轻易地重构。

文档建议以这种方式进行

@Query("SELECT * FROM user")
public List<User> loadUsers();

我担心的是,这实际上是从表中获取所有数据并将它们保存在内存中(我错过了吗?)。相比之下,游标只保存一堆数据(窗口),并根据需要获取新部分。

所以问题是如何使用Room DAO进行大型数据库查询以保持低内存使用率?

1 个答案:

答案 0 :(得分:0)

恕我直言,如果您有一个依赖光标窗口的大型数据库查询,那么您应该重新考虑您的UI。例如,用户不想浏览列表中的数千行。

但是,针对您的问题的架构组件解决方案是the Paging library。您可以让DAO返回DataSource.Factory而不是CursorList,然后您可以使用DataSource.Factory将页面传送到您的用户界面(例如{{1}根据需要。