安卓同步适配器最小时间间隔

3
我已经在我的应用程序中添加了一个SyncAdapter,它将来自服务器的数据同步到Android的sqlite数据库中。我正在使用一个存根ContentProvider。我启用了setSyncAutomatically和addPeriodicSync来设置我的syncAdapter。我将周期性同步间隔设置为15分钟。
问题是,虽然大多数时候都可以完美地工作,但有时我的应用程序会开始重复同步,比如2-3次同步接连进行。
我发现这可能是由于使用setSyncAutomatically引起的,但是如果我删除它,那么我就必须手动转到设置并启用我的应用程序的自动同步。
我的代码 -
ContentResolver.setIsSyncable(newAccount, Constant.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(newAccount, Constant.AUTHORITY, true);
ContentResolver.addPeriodicSync(newAccount, Constant.AUTHORITY, new Bundle(), Constant.SYNC_FREQUENCY);

有没有办法设置我的syncAdapter的最小间隔,以便在此时间间隔之前不再执行?


这些同步(计划中的和额外的)的附加“Bundle”内容是什么? - Marten
什么都没有。我只是传递了一个新的Bundle()。 - Jyotman Singh
我指的是您的同步适配器实际接收到的 Bundle。它可能会告诉您首先触发同步的原因。 - Marten
抱歉,我没有理解。我应该检查哪个bundle?我只传递了上面代码中提到的bundle。 - Jyotman Singh
您的同步适配器中的onPerformSync方法(参见http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html#onPerformSync%28android.accounts.Account,%20android.os.Bundle,%20java.lang.String,%20android.content.ContentProviderClient,%20android.content.SyncResult%29)会获取一个extras Bundle(第二个参数),其中包含您在Bundle中传递的值以及同步管理器添加的一些键。这些键可能会告诉您为什么触发了同步。 - Marten
1个回答

0

没有最小同步间隔,但您可以自己跟踪。只需存储上次同步时间,并在最小间隔尚未过去时退出同步适配器而不进行同步。

然而,正确的解决方案是找出为什么首先会触发这些额外的同步。

使用 setSyncAutomatically() 启用自动同步意味着 Android 应该在内容提供程序使用 ContentResolver.notifyChange(...) 发布更改通知时触发同步,并将 syncToNetwork 参数设置为 true。您应确保从未将此参数设置为 true,以便对同步适配器进行的更改。


不,我从未将其设置为true。我没有在任何地方使用内容提供程序。 - Jyotman Singh
你是否在代码中使用requestSync触发过同步操作呢? - Marten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接