我的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并且不同步时,我会向我的SyncAdapter添加10s的周期性同步,然后在onPerformSync()运行时删除定期同步?这看起来有点像hacky。
有人有任何建议吗?
答案 0 :(得分:0)
onHandleIntent
引发的任何错误?
我认为可行的一个选项是,如果您在执行同步的活动内部指定延迟。
只需将一个额外内容传递到发送给GcmIntentService
的捆绑包中,指明您需要延迟完成。
希望这对你有用。