Дифференциальная восходящая синхронизация для нескольких объектов с помощью Sync Adapter & Room DB
У меня есть несколько сущностей, сохраненных локально с Room DB. Я хочу синхронизировать их с сервером. Я реализовал адаптер синхронизации для него и запланировал синхронизацию. Теперь я хочу, чтобы попытаться синхронизировать только те объекты, которые имеют грязные данные. Каков механизм для достижения этого?
SyncUtil:
@TargetApi(Build.VERSION_CODES.FROYO)
public static void CreateSyncAccount(Context context) {
boolean newAccount = false;
boolean setupComplete = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREF_SETUP_COMPLETE, false);
// Create account, if it's missing. (Either first run, or user has deleted account.)
Account account = SyncAuthenticatorService.GetAccount(ACCOUNT_TYPE);
AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
if (accountManager.addAccountExplicitly(account, null, null)) {
// Inform the system that this account supports sync
ContentResolver.setIsSyncable(account, AUTHORITY, 1);
// Inform the system that this account is eligible for auto sync when the network is up
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
// Recommend a schedule for automatic synchronization. The system may modify this based
// on other scheduled syncs and network utilization.
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
SyncAdapter:
override fun onPerformSync(account: Account, extras: Bundle, authority: String, provider: ContentProviderClient, syncResult: SyncResult) {
pref = PreferenceManager.getDefaultSharedPreferences(context)
Log.e(TAG, "Beginning network synchronization")
upwardQuizAttempts()
upwardStudents()
upwardAttendances()