用于与Web服务同步的Android后台作业

时间:2013-07-26 20:54:13

标签: java android multithreading concurrency

你可以告诉我在Android中执行同步作业的正确方法是什么(例如,如果我有大约5个工作)?
注意!通过同步作业,我指的是一个在后台运行并通过Web服务发送一些数据(例如分析)的线程......

有关详细信息,请阅读更详细的说明:

我有一项任务是实现一些后台作业,这些作业会将一些数据与一个宁静的Web服务同步。有些工作应定期安排,并有特定的延迟。如果没有互联网连接,那么我只是缓存数据,稍后当连接重新出现时,我尝试运行作业。 考虑到创建新线程非常昂贵,特别是在移动开发上,我正在使用缓存线程池(ExecutorService),并且每次请求处理某些操作时我都在尝试重用线程。我不使用AsyncTask,因为我用这个Executor服务(Executors.newCachedTreadPool)取而代之,它对我很方便,因为我不需要创建很多AsyncTasks,因为我重用ES中的线程...为了支持在预定的作业中,我使用另一个线程池(ScheduledExecutorService)并使用Callable,因为我需要查看执行结果。我在这里有一个复杂的逻辑...所以,当在应用程序中完成特定操作时,第一个线程池(就像AsyncTask)将像AsyncTask一样工作,优点是我不创建新线程但我重新审视他们。这不会阻止UI的主线程。它将委托给将执行其工作的预定执行人员。 此解决方案有效。这对我来说听起来不错,因为我来自服务器端,但我很想知道如何在Android上正确完成这项工作?这对于移动应用来说太复杂了吗? 留言Merci, 哔叽

1 个答案:

答案 0 :(得分:12)

使用同步适配器。见http://developer.android.com/training/sync-adapters/index.html。同步适配器在后台运行,由系统管理,并有效安排,以便您的同步不会浪费电池电量。最重要的是,系统将自动检测网络连接并在必要时排队同步适配器。如果需要,可以使用多个同步适配器。

请注意,虽然似乎同步适配器需要内容提供程序和身份验证程序,但实际上并非如此。