为什么指数后退(在GCM中)在重试之前等待前一段时间的两倍?

时间:2016-01-26 18:17:57

标签: android google-cloud-messaging

我已阅读GCM(Google云消息传递)指南。据说,当注册客户端失败到GCM时,我们应该重新注册注册过程。谷歌关于指数退避的建议:"客户端应用应该等待前一段时间的两倍才能重试"。

为什么客户端应用会在重试之前等待前一段时间的两倍?

让我们考虑这个场景;

  1. 我的客户下载了该应用。

  2. 客户直到晚上才打开应用程序。

  3. 客户打算在睡觉前打开应用程序。

  4. 该应用已启动,客户端使用了离线功能。

  5. 此时客户端没有互联网连接。

  6. 所以,我的应用程序会尝试将客户端注册到GCM,直到客户端有互联网,指数退避时间达到几小时或几天。

  7. 所以,这不是一个坏习惯吗?为什么谷歌建议这个?我认为,开发人员应该将最大(限制)时间设置为指数退避时间,至少。

    GCM指南: https://developers.google.com/cloud-messaging/registration

1 个答案:

答案 0 :(得分:1)

作为你给出的标准链接,我在下面的子链接中找到了。

ExponentialBackOff

请阅读以便更好地了解该过程。

您尝试某些时间(或直到达到两个请求之间的最大间隔),并且它需要在那里停止。然后,当用户使用应用程序或您收到Internet_state_change事件时,它将再次处于循环中。

<强> Example from the link :-

默认的retry_interval是.5秒,默认的randomization_factor是0.5,默认的乘数是1.5,默认的max_interval是1分钟。对于10次尝试,序列将是(以秒为单位的值)并假设我们在10日尝试超过max_elapsed_time:

enter image description here