9

我想知道我们在操作过程中SyncManager使用对象时的默认行为是什么SyncResultonPerformSync()

例如,当由于 导致同步错误时IOException,我们设置

syncResult.stats.numIoExceptions++

然后SyncManager必须管理重新发送同步,直到系统指定的延迟。

IOException但是,如果每次同步都准确,那么同步会被重新调用多少次?每次同步之间的默认延迟设置是多少?是否可以定义自己的行为?我在哪里可以找到这方面的文档?

4

2 回答 2

7

SyncResult对象有一个delayUntil字段,您可以从同步适配器设置该字段,该字段将延迟每个后续同步指定的秒数。也许这是您正在寻找的领域。

否则,同步将被重新安排,如果

SyncResult.madeSomeProgress()返回 true - 即同步成功完成了一些工作(对应于stats.numDeletes, stats.numInserts > 0, stats.numUpdates > 0

SyncResult.hasSoftError()返回真 - 即它由于一个IOException或因为SyncResult.syncAlreadyInProgress是真而失败。

因此,要回答您的问题,如果IOExceptions 在每次同步时都发生,SyncManager则将无限重试 - 具有指数退避。

需要注意的是,同步适配器可以设置SyncResult.tooManyRetries = true这将指示SyncManager同步不会重新安排。

于 2013-06-27T23:18:33.217 回答
2

初始重试时间:

/**
 * When retrying a sync for the first time use this delay. After that
 * the retry time will double until it reached MAX_SYNC_RETRY_TIME.
 * In milliseconds.
 */
private static final long INITIAL_SYNC_RETRY_TIME_IN_MS = 30 * 1000; // 30 seconds

SyncResult#tooManyRetries您可以通过设置来告诉框架停止重试同步true

来源:SyncManager.java

于 2014-03-20T21:05:57.777 回答