【问题标题】:Further explanation about IntentService关于 IntentService 的进一步解释
【发布时间】:2010-06-15 13:25:17
【问题描述】:

我试图了解IntentService 的用途,我应该什么时候使用它?

我试图从 API 中理解,但没有足够的细节。

这和在工作线程上运行长任务有什么类比吗?

非常欢迎任何关于我为什么要使用IntentService 的进一步解释和示例。

谢谢,

射线。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    这和这有什么类比吗 在工作线程上运行长任务?

    IntentService 为您处理线程。

    我应该什么时候使用它?

    一些用例:

    • 用于处理AlarmManager触发的警报
    • 用于处理由清单注册BroadcastReceiver 捕获的其他事件
    • 用于处理由应用小部件触发的事件(基于时间的更新、按钮点击等)

    【讨论】:

    • 为什么我最好使用 IntentService 来“处理由 AlarmManager/manifest-registered BroadcastReceiver 触发的警报”,它可以做什么常规服务无法做到?
    • @rayman:它为你处理后台线程和工作队列。
    • 我想我明白了,但我可能知道一些我可以检查的例子,所以我可以看到使用与不使用之间的细微差别?谢谢。
    • 马克的简单而真棒的答案,一如既往。一个问题,我们可以使用IntentService 作为我所有网络相关任务的线程管理器,而不是上面提到的几点吗?
    【解决方案2】:

    Android 服务是平台的主力。它们允许应用程序运行长时间运行的任务并为外部应用程序提供功能。不幸的是,由于它们在后台运行并且对开发人员来说视觉上并不明显,因此它们可能是一个令人头疼的问题。如果您看到 ANR(活动无响应)或想知道为什么服务在不应该运行的情况下运行,则可能是服务实施不善。

    可怕的 ANR 让我们看一下服务导致的两个主​​要错误: ANR。这些破坏了用户的体验并为用户提供了强制关闭的选项。这可能会导致用户卸载您的应用程序或后台进程处于中断状态。这样做的原因是服务是从您的调用线程启动的——通常这是 UI 线程。 始终运行服务。尽管 Android 提供了调度和停止服务的机制,但并非所有开发人员都遵循这些准则。事实上,我见过的很多例子甚至都没有提到停止你的服务。这可能会导致整体性能下降、用户混乱和电池消耗。 我想 Google 的 Android 开发人员看到这已成为一个问题,并在 Android 1.5 中引入了 IntentService 类。 IntentService 类解决了上述问题,并抽象了开发人员对线程和服务停止的所有管理。这是从应用程序的主线程卸载任务的非常简单而强大的方法。

    【讨论】:

      【解决方案3】:

      每当用例是一项需要很长时间但有规律结束的特定任务时,我都会使用它。例如,上面拼写的用例以及诸如以下的常规任务: -同步 - 下载资源 - 从各种来源提取数据并存储它们

      当服务在本质上长时间运行并且没有明确的结束时,我不建议使用它。我已经看到这样做了,这是一个错误,因为人们最终绕过 IntentService 自行停止这一事实的方式是创建锁以防止 handleIntent 完成,或者如果他们不想阻止下一个请求排队,他们将通过再次向自己发送 startService 来重新启动自己。这太可怕了,对于这些类型的场景,您应该只使用一个长时间运行的常规 Android 服务,并确保它绑定到(可能是 AUTO_CREATE)并在主线程之外处理工作。

      【讨论】:

        猜你喜欢
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多