我应该在设备上存储哪些信息,而不是通过网络请求?

时间:2012-11-25 03:50:05

标签: android database rest client-server

我正在开发一个Android应用程序,我正在向服务器发送许多RESTful请求以获取信息。我应该总是提出这些请求,还是将其中的一些请求存储在设备上的SQLite数据库中?如果我应该存储,我如何确定应该存储多少(如果不是全部)数据?

该应用程序属于教育社交网络,因此有以下对象:

  • 用户
  • 学校
  • 注释
  • 课程
    • 评论
    • 问题

目前计划是将信息存储在数据库中并经常检查更新,还是应该始终从服务器请求数据?另外,我应该在单个请求中提取嵌套数据还是将其拆分为多个RESTful请求?

2 个答案:

答案 0 :(得分:1)

最佳解决方案是将所有存储在本地的数据中,有时只需启动AsyncTaskAsyncLoader即可下载更新。这样,您的用户就可以在离线时使用您的应用程序,并且无需等待应用程序启动时完成下载。

您应该始终要显示一些数据。将基本数据集与应用程序一起包含可能很有用,因此即使没有网络,数据库也会在第一次运行时填充。

regarding single vs multiple requests:

单个请求通常比几个较小的请求更快,但是,它在移动网络上失败的可能性更高。如果您的数据请求在GSM网络上的占用时间不超过10秒,那么您应该没问题,否则您可能会考虑拆分为较小的请求。

答案 1 :(得分:1)

虽然在本地存储所有(相关)数据是一种选择,但它有时会变得非常庞大,如果您的应用程序繁荣,那么所需的空间也将如此。而是在本地保留相关数据的最新副本,并广播可由您的应用程序下载的更新(如果在线是另一种方法)。

鉴于您的应用是一种社交网络,您可能希望最新的更新在用户可用时尽快到达。本地存储并定期触发异步任务意味着您要修复更新延迟(这将等于异步任务运行与任务运行时间之间的延迟)。此外,很多时候可能没有更新,你将毫无意义地查询服务器。

这可以通过“广播更新”方法来解决,其中您的服务器存储所服务的设备列表(可以在应用安装时注册),并且每次有与某组设备相关的更新时你可以将更新广播给他们。 (尝试Google Cloud Messaging开始这种方法。)