【发布时间】:2015-05-07 06:08:30
【问题描述】:
我将我的 BAAS 设置为每次服务器上的数据更改时发送 GCM 推送。有时用户可以一次修改一堆项目,每个项目都将被视为对我的数据库的一次更新,并触发一堆 GCM 推送。不幸的是,在服务器端添加一个冷却时间来限制实际 gcm 消息的数量比预期的要复杂一些。因此,相反,我收到了所有这些 gcm 消息,然后我根据上次同步的时间来决定是否再次同步。
编辑:我已经知道如何在我的 GCM 推送中实现冷却时间,但是,我实际上仍然需要知道如何在 X 秒内安排 SyncAdapter 同步。
当我的 WakefulBroadcastReceiver 收到 GCM 消息时,我有一些逻辑来决定是否启动同步。如果我使用 GCM 消息并出于某种原因决定不立即同步(例如最近同步),那么我必须在不久的将来安排一次同步,例如 10 秒。否则,我必须等到下一条 GCM 消息,直到我的逻辑决定是否同步,并且不知道下一条 GCM 消息什么时候。
那我该怎么做呢?我的 WakefulBroadcastReceiver 启动了一个 IntentService。我在 IntentService 中尝试过这样的事情:
onHandleIntent(Intent intent){
if I sync, then completeWakefulIntent
else if I dont sync, postDelayed(sync, and then completeWakefulIntent)
}
但它似乎不起作用。
如果当我使用 gcm 并且不同步时,我将 10 秒的定期同步添加到我的 SyncAdapter,然后在 onPerformSync() 运行时将定期同步删除回来怎么办?这似乎有点骇人听闻。
大家有什么建议吗?
【问题讨论】:
标签: android broadcastreceiver google-cloud-messaging android-wake-lock