【问题标题】:Android schedule a SyncAdapter sync in 10s when I received GCM?当我收到 GCM 时,Android 会在 10 秒内安排一次 SyncAdapter 同步?
【发布时间】: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


    【解决方案1】:

    您的onHandleIntent 抛出的任何错误?

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

    只需将 extra 传递到发送到 GcmIntentService 的捆绑包中,指定您需要延迟完成。

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多