2012-07-06 26 views
7

私は同期が原因IOExceptionに誤りがあるとき、私たちはSyncAdapter&SyncResult

syncResult.stats.numIoExceptions++ 
を設定し、我々は例えば運転中に onPerformSync()

をオブジェクトSyncResultを使用する場合SyncManagerのデフォルトの動作であるかを知りたいです

SyncManagerは、システムによって遅延が指定されるまで、再送信同期を管理する必要があります。

しかし、同期するたびにIOExceptionが発生すると、何回シンクが再コールされますか? 各同期の間に設定されるデフォルトの遅延は何ですか? それ自体の動作を定義することは可能ですか? どこにドキュメントがありますか?

答えて

6

オブジェクトにはdelayUntilというフィールドがあります。このフィールドは同期アダプタから設定できます。このフィールドは、指定された秒数だけ同期を遅らせます。おそらく、これはあなたが探している分野です。

SyncResult.madeSomeProgress() trueを返しそうでない場合、同期が再スケジュールされます - つまり、いくつかの作業が正常に(、stats.numDeletesに対応stats.numInserts > 0stats.numUpdates > 0)同期することにより達成された

SyncResult.hasSoftError() trueを返します - それが失敗したため、すなわち、 IOExceptionに、またはSyncResult.syncAlreadyInProgressが真であったためです。

あなたの質問に答えて、IOExceptionがすべての同期で発生した場合、SyncManagerは指数バックオフを使用して広告を無限に再試行します。

これに注意してください。同期アダプタは、SyncManagerに同期が再スケジュールされないことを示すSyncResult.tooManyRetries = trueを設定できます。

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 

あなたはtrueSyncResult#tooManyRetriesを設定することにより、再試行に同期を停止するためのフレームワークを伝えることができます。

出典:SyncManager.java

関連する問題