我实现了一个Android应用程序,它需要一组由SQL Server数据库采集的数据。应用程序获取调用WS的数据。在应用程序第一次启动第一次调用WS之后,我需要根据服务器端可能发生的修改(SQL服务器数据库)来维护数据更新。 为了获得此结果,我使用具有预定义频率的WS调用来执行,以了解数据库上的数据是否已更改。如果有新数据可用,则会调用其他Web服务来获取它们。
此解决方案适用于我(我不需要实时更新)。但是,我认为这个解决方案在能耗,CPU消耗和网络流量方面过于昂贵。 因为,我觉得这是一个非常普遍的问题,我知道是否存在一种处理它的通用方法。
答案 0 :(得分:1)
在大多数情况下,你做的事情都可以。您可以利用Google Cloud Messaging,但需要时间和精力才能实施。我会坚持你的解决方案。
答案 1 :(得分:1)
我建议你使用额外的字段。在Android中的本地表中添加四个列:
工作流程很简单: 检索服务器的数据时,只需检查资源的上次更新时间戳是否优于之前定义的缓存时间戳。如果时间戳优越,则执行更新数据的请求。交易布尔让您知道特定资源实际上正在与服务器同步。结果代码可以让您知道请求是否失败,并在网络可用时重新尝试。这样,您将保持本地和远程数据库之间的持久性,因为您可以随时检查任何本地资源的“同步状态”,这要归功于之前看到的额外字段。
我建立了一个库来处理这个问题。看看RESTDroid。即使缓存功能不是句柄,您也可以简单地添加它。
答案 2 :(得分: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