Android 关注分页库sqlite数据存储
Android Paging library sqlite data storage concern
在过去的几天里,我已经习惯了 Android Architecture Components and I've been mostly interested in the Paging Library 来处理和显示来自远程源的数据列表。
为了获得最佳用户体验,最好先将数据加载到数据库中,在本例中 Room 然后使用 pagingLibrary 和适配器将其显示在回收视图中。我担心的是,假设一个 api 有 1000 条记录或一个 twitter 提要,所有这些数据都必须通过数据库然后传递到 UI,如何处理设备上的这个存储?将所有数据存储在设备上是个坏主意。有没有办法删除 'stale' 数据,或者推荐的方法是什么?
编辑:
android 团队一直在为分页库开发 V3,这里是一篇 link 的文章,可能会阐明更多内容 article here
RemoteMediator
有一个 initialize
API 保证在加载开始之前完成。您可以覆盖 initialize
以检查数据是否过时以执行您需要的任何设置(例如修剪旧条目),但如果只有 1000 行导致严重的性能问题,我个人会感到有点惊讶。
对于像这些 PagingSource
查询这样的热代码路径,您可以查看 androidx.benchmark 以确定它是否值得优化。
编辑:如果您不想在刷新时保留任何旧推文,您可能需要考虑在成功的远程刷新时简单地清除 table,因为这是最简单的方法。 initialize
适用于您需要进行手动修剪/设置/过时检查的情况(例如,您可以检查数据的年龄并决定是否要刷新),但只需在远程刷新中清除在插入新页面之前效果很好,因为您希望无论如何都必须重新启动分页。确保在同一事务中执行清除 + 插入操作,这样您就不会因数据库更新而导致两次无效!
在过去的几天里,我已经习惯了 Android Architecture Components and I've been mostly interested in the Paging Library 来处理和显示来自远程源的数据列表。 为了获得最佳用户体验,最好先将数据加载到数据库中,在本例中 Room 然后使用 pagingLibrary 和适配器将其显示在回收视图中。我担心的是,假设一个 api 有 1000 条记录或一个 twitter 提要,所有这些数据都必须通过数据库然后传递到 UI,如何处理设备上的这个存储?将所有数据存储在设备上是个坏主意。有没有办法删除 'stale' 数据,或者推荐的方法是什么?
编辑: android 团队一直在为分页库开发 V3,这里是一篇 link 的文章,可能会阐明更多内容 article here
RemoteMediator
有一个 initialize
API 保证在加载开始之前完成。您可以覆盖 initialize
以检查数据是否过时以执行您需要的任何设置(例如修剪旧条目),但如果只有 1000 行导致严重的性能问题,我个人会感到有点惊讶。
对于像这些 PagingSource
查询这样的热代码路径,您可以查看 androidx.benchmark 以确定它是否值得优化。
编辑:如果您不想在刷新时保留任何旧推文,您可能需要考虑在成功的远程刷新时简单地清除 table,因为这是最简单的方法。 initialize
适用于您需要进行手动修剪/设置/过时检查的情况(例如,您可以检查数据的年龄并决定是否要刷新),但只需在远程刷新中清除在插入新页面之前效果很好,因为您希望无论如何都必须重新启动分页。确保在同一事务中执行清除 + 插入操作,这样您就不会因数据库更新而导致两次无效!