【问题标题】:Android background jobs for synchronization with a web service用于与 Web 服务同步的 Android 后台作业
【发布时间】:2013-07-27 06:52:01
【问题描述】:

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

更多详情请阅读更详细的说明:

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

【问题讨论】:

    标签: java android multithreading concurrency


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢乔,你的回答真的很有帮助。我已经阅读了这篇文章,我将使用同步适配器。看来这就是我要找的...非常感谢。
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多