9

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

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

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

4

1 回答 1

12

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

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

于 2013-07-26T22:49:38.467 回答