在我的AccountAuthenticatorActivity
中,我尝试使用以下行在addAccountExplicitly
之后为帐户设置sync-options:
ContentResolver.setIsSyncable(account, authority, 1);
ContentResolver.setSyncAutomatically(account, authority, true);
int seconds = getResources().getInteger(R.integer.syncFrequencySeconds);
ContentResolver.addPeriodicSync(account, authority, new Bundle(), seconds);
syncFrequencySeconds
设定为86400(每24小时)。但我的同步适配器仍然每分钟触发一次。我究竟做错了什么? (同步本身没有任何问题)
自己解决了:当SyncResult.stats
与ContentResolver-Operations不匹配时,sync-adapter会重复。在匹配时,会按预期触发同步。
更新:另一个问题是,我在同步操作期间调用了ContentResolver.notifyUpdate。删除了,这很好。
我的SyncAdapter
每分钟都跑,而不是尊重pollFrequency
间隔。我只使用查询将本地数据发送到远程服务器(在SyncAdapter
上)。我没有更新SyncAdapter
上的任何本地数据。
但我的本地数据正在使用其他服务以非常短的间隔(从BLE设备接收数据)进行更新。
要解决这个问题,我必须更改我的数据提供程序上的所有notifyChange
调用,以包含附加参数syncToNetwork: false
(检查notifyChange文档)。
//getContext().getContentResolver().notifyChange(uri, null);
getContext().getContentResolver().notifyChange(uri, null, false);
这个更改不会影响我在CursorAdapter
中使用的Activity
,以便在我更新表格后立即显示数据。
为syncResult.stats
分配适当的值并没有解决我的问题。