为什么SyncAdapter会创建默认的定期同步,即使我没有调用addPeriodicSync()?

时间:2017-04-20 09:07:31

标签: java android android-syncadapter

我已按照Google样本中的BasicSyncAdapter示例进行操作,我想知道如果我comment out the call to addPeriodicSync() function in the code,我们甚至会创建默认的定期同步(同步间隔86400秒或24小时)。

我找不到创建SyncAdapter的任何文档,并且存根代码(SyncService,Authenticator帐户等)也会创建具有该默认同步间隔的周期性同步。

我的问题:是否可以创建没有默认定期同步的SyncAdapter?

感谢。

BTW,这就是我检测周期性同步的方法。

java.util.List<PeriodicSync> periodicSyncsList = ContentResolver.getPeriodicSyncs(myaccount, CONTENT_AUTHORITY);
Log.d(TAG, "Number of syncs in the periodicSyncsList = " + periodicSyncsList.size());
for (PeriodicSync p : periodicSyncsList) {
    Log.d(TAG, p.toString());
}

2 个答案:

答案 0 :(得分:1)

我知道现在有点晚了,但是我希望这个答案可以对某人有所帮助。

我在本文http://blog.udinic.com/2013/07/24/write-your-own-android-sync-adapter的“自动同步”部分中发现,setSyncAutomatically方法将隐式地将定期更新设置为24h。

因此,解决问题的方法只是将以下方法调用中的最后一个参数更改为false。

ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, false);

我对方法调用顺序有类似的问题。这将导致定期同步间隔设置为SYNC_FREQUENCY的值。

ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, true);
ContentResolver.addPeriodicSync(account, CONTENT_AUTHORITY, new Bundle(),SYNC_FREQUENCY);

但是此方法的调用顺序将导致24小时的定期同步间隔。

ContentResolver.addPeriodicSync(account, CONTENT_AUTHORITY, new Bundle(),SYNC_FREQUENCY);
ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, true);

注意这一点。

欢呼

答案 1 :(得分:0)

设置定期同步似乎是持久操作。这意味着一旦设置它就会保持活动状态,直到您拨打ContentProvider.removePeriodicSync或卸载应用程序。

这意味着只是评论ContentProvider.addPeriodicSync并没有帮助摆脱它。尝试卸载应用程序并再次运行它而不调用ContentProvider.addPeriodicSync。必须禁用定期同步。