2012-07-06 23 views
7

Tôi muốn biết hành vi mặc định của SyncManager là gì khi chúng ta sử dụng đối tượng SyncResult trong hoạt động onPerformSync()SyncAdapter & SyncResult

Ví dụ, khi đồng bộ hóa là do lỗi do IOException, chúng tôi đặt

syncResult.stats.numIoExceptions++ 

Sau đó, SyncManager phải quản lý việc gửi lại đồng bộ hóa cho đến khi có sự chậm trễ do hệ thống chỉ định.

Nhưng số lần đồng bộ hóa lại gọi nếu IOException đồng ý với từng đồng bộ? Độ trễ mặc định được đặt giữa mỗi đồng bộ hóa là gì? Có thể xác định hành vi của riêng mình không? Tôi có thể tìm tài liệu về điều đó ở đâu?

Trả lời

6

Đối tượng SyncResult có trường delayUntil mà bạn có thể đặt từ bộ điều hợp đồng bộ hóa sẽ trì hoãn đồng bộ hóa sau theo số giây được chỉ định. Có lẽ đây là lĩnh vực bạn đang tìm kiếm.

Nếu không, đồng bộ sẽ được dời lại nếu

SyncResult.madeSomeProgress() trả về true - tức là một số công việc đã được thực hiện thành công bởi sự đồng bộ (tương ứng với stats.numDeletes, stats.numInserts > 0, stats.numUpdates > 0)

SyncResult.hasSoftError() trả về true - tức là nó thất bại do đến số IOException hoặc vì SyncResult.syncAlreadyInProgress là đúng.

Vì vậy, để trả lời câu hỏi của bạn, nếu IOException s xảy ra lúc MỌI đồng bộ hóa, SyncManager sẽ thử lại quảng cáo vô hạn - với số lần trả về theo hàm mũ.

Thông báo trước cho điều này là bộ điều hợp đồng bộ có thể đặt SyncResult.tooManyRetries = true sẽ chỉ ra cho SyncManager rằng đồng bộ hóa sẽ không được lên lịch lại.

1

Thời gian retry ban đầu:

/** 
* 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 

Bạn có thể nói với khuôn khổ để ngăn chặn thử lại đồng bộ bằng cách thiết lập SyncResult#tooManyRetries để true.

Nguồn: SyncManager.java

Các vấn đề liên quan