Answers:
在很大程度上取决于您需要哪种同步。
如果您的应用程序是新闻应用程序,并且每天在特定时间发布帖子(例如每天7.45 AM),那么您在后台服务(例如,早上8点)中运行定期任务。
例如:滴水。他们每天(约6.30 PM)通知我一次。我相信他们使用定期任务。
如果您的数据传输是由用户操作触发的,则使用后台服务或AsyncTask进行数据传输。
例如:DropBox / Evernote。当我与应用互动时,它们会同步。
如果您的应用程序运行即时消息传递/邮件/非周期性重要更新,则您需要推送通知,因为您想立即提醒用户。在这种情况下,请使用GCM或Parse。例如:WhatsApp / Google聊天。既然您明确提到了您不想使用GCM,我将告诉您为什么应该使用标准的推送通知提供程序,而不是编写自己的推送通知提供程序:
推送通知可立即工作-延迟很少(几秒钟,很少是几分钟)。如果您要实现自己的解决方案/库来执行此操作-在幼稚的模型中,则应每隔一秒钟或5秒或一分钟ping服务器一次,以检查状态。这非常低效,因为它会消耗CPU(并因此消耗电池),移动设备上的带宽以及服务器上的负载。但是,在GCM / Parse中,它们始终使服务器保持端口开放(请参见此处)。这是标准且最有效的方法。另外,如果10个应用程序使用GCM,则不需要10个打开的连接,而每个设备仅需要一个。而且,除非您有充分的理由/资金/时间这样做,否则您真的不想开发自己的解决方案。
关于Sync Adapter的注释:Sync Adapter在以上三种情况下均能很好地工作。选中“ 运行同步适配器”,您将看到它取决于GCM还是您自己的机制(事件触发或自定义解决方案)或网络可用性(事件触发)或周期性事件。总而言之,这是一个非常方便的类,用于同步数据,而不必每次都进行一长串的初始化或在一个地方实现上述所有情况。
SyncAdapter
其他答案未提及a的一个方面。
该SyncAdapter
模式要求您具有要同步的特定ContentProvider权限以及要同步的特定帐户类型(请参阅Authenticator)。因此,除非您的体系结构中已有这些组件(例如,因为您授予其他应用程序对数据的访问权限或需要支持帐户),SyncAdapter
否则将导致大量的实施开销。
除非您需要实时数据,否则应使用同步适配器,因为,它会根据各种条件自动执行数据传输,例如数据更改,经过的时间,一天中的时间等。它集中所有数据传输,因此您的数据传输将与从其他应用程序传输数据,从而减少了电池消耗。
对于瞬时任务,我们可以使用,
持续时间较短的任务的AsyncTask可能为3-4秒。
IntentService用于长时间运行的任务。