当我收到GCM时,Android会在10秒内安排SyncAdapter同步吗?

时间:2015-05-07 06:08:31

标签: android broadcastreceiver google-cloud-messaging android-wake-lock

我的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。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

onHandleIntent引发的任何错误?

我认为可行的一个选项是,如果您在执行同步的活动内部指定延迟。

只需将一个额外内容传递到发送给GcmIntentService的捆绑包中,指明您需要延迟完成。

希望这对你有用。