Cloudant& Android:防止重复轮询数据库中的更改

时间:2015-07-31 12:03:36

标签: android google-cloud-messaging cloudant

我对Cloudant有疑问。

基本上,我们有一个应用程序,旨在协调人们在空闲时见面的共同时间,这将通过他们的"投票"在应用程序上。

所以,我们已经找到了如何从Cloudant启动Pull Replication,然后在我们的数据库中更新任何更改。我们将此方法称为onReceiveUpdate()

我们当前的方法是将这个onReceiveUpdate()方法包含在服务中的无限循环中,如下所示:

@Override
protected Void doInBackground(Void... params) {
    while (true) {
        onReceiveUpdate();
    }
return null;
}

显然,这是一个糟糕的设计,我在电话开始过热时意识到了这一点。我决定阅读更多内容,并遇到了Cloudant's Eventbus/Event

但是,我不确定这是否会让我在Cloundant数据库发生变化时收到通知。所以我去研究更多并找到了Google Cloud Messaging。

我现在的方法是:

  1. 为每个用户设置文档。
  2. 与用户相关的任何更改都将导致其相应的文档被修改。
  3. 然后,Cloudant会通知Google Cloud Messaging文档已被修改。因此,它应该向Google Cloud Messaging发送通知,并使用相关的注册ID进行标记。
  4. 然后,Google Cloud Messaging应通知相关用户(通过注册ID)更新,最终将导致实际用户呼叫onReceiveUpdate()
  5. 问题:如何实施第3步?也就是说,我如何确保Cloudant将<#34; 发送格式正确的请求发送到GCM连接服务器&#34; (来自here),是否有变更?我阅读了他们的文档,但我还没有抓到任何东西。

    否则,是否有其他更少的电池密集型替代方案来从Cloudant中提取复制?

1 个答案:

答案 0 :(得分:1)

Cloudant不会告诉GCM已经进行了更改。了解是否对数据库进行了更改的最佳方法是使用changes feed。 当您收到更改时,您的服务器代码将需要决定需要通过GCM告知哪个客户端(如果有)与服务器进行复制。