0

我实现了一个需要一组数据的 Android 应用程序,这些数据由 SQL Server 数据库获取。应用程序获取调用 WS 的数据。在应用程序第一次启动时第一次调用 WS 后,我需要根据服务器端(SQL 服务器数据库)可能发生的修改来保持数据的更新。为了获得此结果,我以预定义的频率执行 WS 调用,以了解数据库上的数据是否已更改。如果有新数据可用,则调用其他 Web 服务来获取它们。

该解决方案适用于我(我不需要实时更新)。但是,我认为这种解决方案在能耗、cpu 消耗和网络流量方面都过于昂贵。因为,我想这是一个非常常见的问题,我会知道是否存在一种通用的方法来处理它。

4

3 回答 3

1

我建议您使用额外的字段。在 Android 的本地表中添加四列:

  • TRANSACTING_FLAG :当您在服务器上发布或更新此资源时,将其设置为 true
  • REQUEST_STATE :将此标志设置为 POSTING / UPDATING / DELETING 等。
  • RESULT_CODE :将此字段设置为服务器收到的针对此特定资源的最后一个结果代码。
  • TIMESTAMP :必须更新数据之后的时间段

工作流程很简单:当您为服务器检索数据时,只需检查资源的最后更新时间戳是否优于您之前定义的缓存时间戳。如果时间戳更好,则执行更新数据的请求。事务处理布尔值让您知道特定资源实际上正在与服务器同步。结果代码让您知道请求是否失败,并最终在网络可用时重试。这样做,您将维护本地和远程数据库之间的持久性,因为由于之前看到的额外字段,您可以随时检查任何本地资源的“同步状态”。

我做了一个图书馆来处理这个。看看RESTDroid。即使缓存功能不是句柄,您也可以简单地添加它。

于 2013-02-21T09:33:48.107 回答
1

在大多数情况下,您所做的都可以。您可以利用Google Cloud Messaging,但需要时间和精力来实施。我会坚持你的解决方案。

于 2013-02-21T08:54:27.240 回答
0

您可以使用 SqlDependency - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx之类的东西查看查询通知。您可以使用它来跟踪查询结果是否更改,并在发生这种情况时通知应用程序。

您可以使用的查询有限制,服务器上的成本类似于索引视图。顺便说一句,您需要.NET。如果在您的 Web 服务中实现,您必须为您的 android 实现某种订阅功能,以便可以将通知推送到它。

降低检查更改成本的另一个选择可能是 SQL Server 更改跟踪 - http://msdn.microsoft.com/en-us/library/bb933875.aspx

于 2013-02-21T09:06:27.027 回答