关于IntentService的进一步说明

时间:2010-06-15 13:25:18

标签: android android-intent

我试图达到IntentService的目的,我什么时候应该使用它?

我试图从API中了解,但没有足够的详细信息。

在工作线程上执行此任务和运行长任务之间是否有任何类比?

我将非常欢迎任何有关我使用IntentService的原因的进一步解释和示例。

谢谢,

射线。

3 个答案:

答案 0 :(得分:13)

  

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

IntentService为您处理线程。

  

我什么时候应该使用它?

一些用例:

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

答案 1 :(得分:2)

Android服务是该平台的主力军。它们允许应用程序运行长时间运行的任务并为外部应用程序提供功能不幸的是,由于它们在后台运行并且对于开发人员而言在视觉上并不明显,因此它们可能成为主要问题的根源。如果您已经看到ANR(活动没有响应)或者想知道服务运行的原因何时不应该运行,那么可能会出现服务不佳的问题。

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

答案 2 :(得分:0)

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

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