Android周期同步
我有一个Android周期同步,android,Android,我有一个SyncAdapter,需要每午夜同步一次。我正在使用ContentResolver.addPeriodicSync执行定期同步,但我不知道如何在午夜触发它 我考虑过几个选择,但没有一个是完全正确的: 设置一个在午夜触发的警报(使用AlarmManager),启动一个带有同步意图的广播,并在每个活动中注册/注销接收器 与1类似,但使用服务。该服务在启动时启动并无限期运行 关于如何正确执行此操作,您有什么想法吗?来自《Android同步适配器指南》: 请注意,addPeriodicSync
SyncAdapter
,需要每午夜同步一次。我正在使用ContentResolver.addPeriodicSync
执行定期同步,但我不知道如何在午夜触发它
我考虑过几个选择,但没有一个是完全正确的:
AlarmManager
),启动一个带有同步意图的广播
,并在每个活动中注册/注销接收器
服务
。该服务在启动时启动并无限期运行关于如何正确执行此操作,您有什么想法吗?来自《Android同步适配器指南》: 请注意,addPeriodicSync()不会在一天中的特定时间运行同步适配器。要在每天大致相同的时间运行同步适配器,请使用重复警报作为触发器。AlarmManager的参考文档中详细介绍了重复报警。如果使用方法setInexactRepeating()设置具有某些变化的时间触发器,则仍应随机化开始时间,以确保从不同设备运行的同步适配器是交错的 jlhonora您的评论是正确的:
通过随机启动报警和报警,可以避免尖峰 使用AlarmManager.setInexactRepeating触发它 因此,使用AlarmManager是正确的,但应考虑随机启动
有关我参考的完整指南,请参见。为什么需要在午夜?这不会一下子导致大规模流量峰值吗?通过随机启动警报并使用
AlarmManager触发警报可以避免峰值。setInexactRepeating
。同步适配器也会做同样的事情,那么为什么需要在午夜进行呢?@ianhanniballake用户输入数据,他们应该手动上传数据(只要他们准备好了)。他们可能会忘记手动同步,因此数据将每天同步一次。我不能在他们处理数据时进行同步,因为我可能正在同步未完成的工作。这就是为什么午夜是一个不错的选择,在他们处理数据时同步数据的可能性较小。