2012-07-06 72 views
7

我想知道什麼是SyncManager默認行爲,當我們操作onPerformSync()SyncAdapter&SyncResult

例如,當同步是錯誤的,因爲IOException過程中使用對象SyncResult,我們設置

syncResult.stats.numIoExceptions++ 

Then SyncManager必須管理重發同步,直到系統指定的延遲。

但是,如果IOException在每次同步時發生同步,則重新呼叫同步的次數是多少? 每次同步之間設置的默認延遲是多少? 可以定義自己的行爲嗎? 我在哪裏可以找到關於這方面的文檔?

回答

6

SyncResult對象有一個delayUntil字段,您可以從您的同步適配器設置該字段,該字段會將每個後續同步延遲指定的秒數。也許這是你正在尋找的領域。

否則,同步將被重新安排,如果

SyncResult.madeSomeProgress()返回true - 即一些工作成功地被同步完成(對應於stats.numDeletesstats.numInserts > 0stats.numUpdates > 0

SyncResult.hasSoftError()返回true - 即它失敗,由於到IOException或因爲SyncResult.syncAlreadyInProgress爲真。

所以要回答你的問題,如果IOException出現在每次同步,SyncManager將無限期重試 - 指數退避。

需要注意的是,同步適配器可以設置SyncResult.tooManyRetries = true,它將向SyncManager指示同步不會被重新安排。

1

初始重試時間:

/** 
* 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#tooManyRetriestrue停止重試同步。

來源:SyncManager.java