我已经设置了一个应用程序来执行与Android同步框架的同步。大多数内部都是从同步适配器演示中获取的。我有一个非常简单的问题,这个应用什么时候同步?我知道谷歌服务会在他们收到网络时同步“发痒”这种情况也是如此,你已经设置同步的服务?
答案 0 :(得分:5)
正如Amorgos所提到的,你提到的那些痒痒是C2DM推送消息。如果在云中制作更改后立即同步更重要,您应该考虑实施它们。您可以访问here获取更多信息。
要请求同步操作,您必须查看的课程是ContentResolver。如果要同步呼叫 requestSync(帐户帐户,字符串权限,捆绑附加功能)(将其用于立即同步按钮或类似功能)。要同步ContentProvider中的更改,您可以调用
getContentResolver().notifyChange(CONTENT_URI, null, true);
创建/更改条目后(对于不应同步的更改,将false替换为true,并且不会触发同步)。如果SyncAdapter的xml文件中的 android:supportsUploading 设置为true,则会自动触发同步。在这种情况下,SyncAdapter中的Bundle包含一个布尔值,其中键为 ContentResolver .SYNC_EXTRAS_UPLOAD,该值为true。您可以使用它将本地更改同步到云,而不是查询任何内容。
如果您只想同步每个小时,请使用 addPeriodicSync(帐户帐户,字符串权限,捆绑附加内容,长pollFrequency)。
您还可以使用ContentResolver来读取/设置是否应该同步(在帐户和同步设备设置中显示的值)。方法是 getIsSyncable(...)和 setIsSyncable(...)。
我希望这可以帮到你。
编辑: 这也描述了真正好的过程:Why does ContentResolver.requestSync not trigger a sync?
答案 1 :(得分:1)
这一切都取决于您的应用程序的要求。如果您正在同步数据并不是用户立即知道的关键数据,那么启动同步的操作系统可能就足够了。 (联系人列表就是一个很好的例子)
如果您的应用依赖于以更实时的方式获得通知,那么您应该考虑使用C2DM推送通知来启动同步过程。当服务器修改数据并将其发送到您的设备时,您可以引发C2DM消息。然后,该应用将根据此消息的内容运行您的同步过程。 (例如,C2DM是您为Gmail引用的网络痒)
您可以自行设计应用程序,以决定何时使用您决定的方式有效地启动同步。所有应用都有不同的同步要求。