【发布时间】:2015-12-13 23:42:33
【问题描述】:
我正在尝试找出 Android 中数据缓存的最佳策略,特别是考虑到使用数据绑定库。
Android 文档似乎确实非常强调使用内置 SQLite 数据库并在内容提供者的帮助下访问它。但是,假设我的应用程序从 REST API 检索 JSON 格式的数据,使用此策略将需要以下内容:
Make HTTP request --> Parse JSON --> Insert results into DB
--> Call content provider --> Build model from cursor --> Bind to view
这不仅看起来像是一种非常迂回的方式来做一些相对简单的事情,而且假设所有这些都发生在用户第一次打开应用程序时,结果会在屏幕上出现任何有用的东西之前等待很多很多。
为了加快速度,我可能会决定提前创建模型并让缓存在单独的线程中进行,如下所示:
Make HTTP request --> Build model from JSON --> Bind to view
-->(NEW THREAD) --> Insert results into DB
一旦数据被缓存,用户下次打开应用时会发生以下情况:
Call content provider --> Build model from cursor --> Bind to view
但这当然会增加更多的复杂性,例如迫使我维护代码以从两个来源构建模型:JSON 和内容提供者返回的游标。
鉴于上述情况,我更想放弃 SQLite/ContentProvider 模型,而是执行以下操作:
Make HTTP request --> Build Model and Store JSON to file --> Bind to view
虽然这会大大减少样板文件、解析(大量可用于 JSON 解析的库)和整体复杂性,但这也意味着我无法利用内容提供程序或 SQLite 的功能。
所以问题是,我应该遵循哪种模式?有没有一种情况比另一种更好?或者有没有我不知道的更好的方法来处理这个过程?
【问题讨论】:
-
我知道这并不能真正回答您的问题,但是您可以在预加载的 SQLite 数据库中提供数据吗?在这种情况下,我建议您查看这个小教程:6020peaks.com/2015/03/…
-
可能不会。我的数据变化非常频繁,所以除非它是新的 API,否则它毫无用处。
-
好的。在这种情况下,我建议查看 Google IO 应用程序的代码。我记得他们解决了为不同事件检索数据时遇到的相同问题:github.com/google/iosched 您可能想从这里开始:github.com/google/iosched/tree/master/updater/src/main/java/com/…
-
更多关于 JSON 部分的信息在这里:github.com/google/iosched/blob/master/doc/SYNC.md
-
@spacitron 你是怎么解决这个问题的?