【问题标题】:Room DAO Cursor replacementRoom DAO 光标替换
【发布时间】:2018-06-02 11:56:10
【问题描述】:

目前我正在重构一个有点旧的项目,并决定使用 Room DAO。这个项目使用 Cursor 来显示一长串实体。 Ok Room DAO 具有返回光标的能力。

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

但是官方文档不鼓励我们使用它

注意:强烈建议不要使用 Cursor API,因为 它不保证行是否存在或行的值是什么 包含。仅当您已有代码时才使用此功能 需要一个游标,并且您无法轻松重构。

文档建议这样做

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

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

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

【问题讨论】:

    标签: android android-room android-cursor


    【解决方案1】:

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

    但是,架构组件针对您的问题的解决方案是the Paging library。您可以让您的 DAO 返回 DataSource.Factory 而不是 CursorList,并且您可以根据需要使用该 DataSource.Factory 将页面传递到您的 UI(例如,RecyclerView)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2018-04-19
      相关资源
      最近更新 更多