2013-02-27 144 views
3

如果我与服务交互的方式是单向的(即只有呼叫服务做某事而不询问结果)。什么是这两种方法之间的差异onStartCommand意向动作与绑定服务

  1. startService(intent)onStartCommand做任务取决于intent.getAction
  2. 绑定服务,并使用Messenger发送消息给服务。因此,该服务根据消息完成任务。

这里是一个区别,我可以认为(我不知道):
对于方法1,我们需要每一个我们称之为startService时间创建服务,所以超载是我们需要每次创建服务除非使用START_STICKY

回答

2

有几个不同,但最重要的是线程管理。

IntentService 如果您使用Intent服务,则在单个守护程序线程中调用onHandleIntent。每次对startService的新调用都将显示为对onHandleIntent的按序排队调用。结果很简单,表现良好,在守护进程线程上按顺序执行调用。顺便说一句,直到队列为空的服务不会停止自己:没有必要在相同的应用程序,以“重建”

绑定的服务 有,实际上,两种情况绑定服务。如果它在您的进程中运行,该服务将在UI线程上运行。如果你需要运行关闭 UI线程,你将不得不建立自己的线程(可能是一个Looper),并因此与Messenger交谈。结果更灵活(线程数量,排队顺序等由您决定),但与IntentService非常相似。在另一个应用

绑定的服务 如果被绑定的服务属于不同的应用程序,你给它调用几个连结线的一个运行。您不需要管理这些线程,它们由框架提供。但是,他们可以按顺序执行您的呼叫。

+0

谢谢,但onStartCommand呢? – Bear 2013-02-28 01:56:30

+0

所有服务都有一个onStartCommand方法。您可以在我描述的三种情况中的任何一种情况下,在onStartCommand服务中处理intent.getAction。这不是一个显着的特征。 – 2013-02-28 04:41:32