Android 同步适配器&;同步结果

Android 同步适配器&;同步结果,android,synchronization,Android,Synchronization,我想知道在操作过程中使用对象SyncResult时SyncManager的默认行为是什么onPerformSync() 例如,当同步由于IOException而出错时,我们设置 syncResult.stats.numIoExceptions++ 然后,SyncManager必须管理重新发送同步,直到系统指定的延迟 但是,如果每次同步时出现IOExceptionaccurs,则重新调用同步的次数是多少? 每次同步之间设置的默认延迟是多少? 这可以定义它自己的行为吗? 在哪里可以找到相关文档?S

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

例如,当同步由于
IOException
而出错时,我们设置

syncResult.stats.numIoExceptions++
然后,
SyncManager
必须管理重新发送同步,直到系统指定的延迟

但是,如果每次同步时出现
IOException
accurs,则重新调用同步的次数是多少? 每次同步之间设置的默认延迟是多少? 这可以定义它自己的行为吗?
在哪里可以找到相关文档?

SyncResult对象有一个
delayUntil
字段,您可以从同步适配器中设置该字段,该字段会将随后的每次同步延迟指定的秒数。也许这就是你要找的领域

否则,如果出现以下情况,将重新安排同步:

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

SyncResult.hasSoftError()
返回true-即由于
IOException
或因为
SyncResult.syncAlreadyInProgress
为true而失败

因此,为了回答您的问题,如果每次同步时都出现
IOException
s,那么
SyncManager
将无限期地重试,并进行指数退避


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

初始重试时间:

/**
 * 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
,可以告诉框架停止重试同步


来源:

我已启用加密。。。如果没有键,我希望syncadpater稍后触发同步。同步延迟没有确定的时间。我们如何才能做到这一点?