指数退避算法exponential back

在很多场景下,我们都需要解决一些诸如轮训这样的问题。如果这样的算法出现在app上,这种轮训对于app性能和电量的消耗都是个巨大的灾难,那如何解决这种问题呢?

app在上一次更新操作之后还未被使用的情况下,使用指数退避算法exponential back-off algorithm来减少更新频率。这里我们介绍下指数退避算法。

SharedPreferences sp = context.getSharedPreferences(PREFS, Context.MODE_WORLD_READABLE);

boolean appUsed = sp.getBoolean(PREFS_APPUSED, false);long updateInterval = sp.getLong(PREFS_INTERVAL, DEFAULT_REFRESH_INTERVAL);if (!appUsed) if ((updateInterval *= 2) > MAX_REFRESH_INTERVAL)updateInterval = MAX_REFRESH_INTERVAL;Editor spEdit = sp.edit();spEdit.putBoolean(PREFS_APPUSED, false);spEdit.putLong(PREFS_INTERVAL, updateInterval);spEdit.apply();rescheduleUpdates(updateInterval);executeUpdateOrPrefetch();

初始化一个网络连接的花费不会因为是否成功下载了数据而改变。我们可以使用指数退避算法来减少重复尝试(retry)的次数,,这样能够避免浪费电量。例如:

private void retryIn(long interval) { boolean success = attemptTransfer(); if (!success) {retryIn(interval*2 < MAX_RETRY_INTERVAL ?interval*2 : MAX_RETRY_INTERVAL); }}

最美不过偷瞄你是你忽然转头,看见你的微笑

指数退避算法exponential back

相关文章:

你感兴趣的文章:

标签云: