带有意图动作的onStartCommand vs绑定服务



如果我与服务交互的方式是单向的(即只调用服务做某事而不要求结果)。这两种方法的区别是什么?

  1. startService(intent)onStartCommand的任务取决于intent.getAction
  2. 绑定业务,并通过Messenger向业务发送消息。

这是我能想到的一个区别(我不确定):
对于方法1,我们需要在每次调用startService时创建服务,所以重载是我们需要每次都创建服务,除非使用START_STICKY

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

IntentService 如果你使用Intent服务,onHandleIntent会在一个守护线程中被调用。对startService的每个新调用都将显示为对onHandleIntent的有序队列调用。结果是在该守护线程上简单、有序地执行调用。顺便说一句,服务不会停止自己,直到队列是空的:不需要"重新创建"

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

绑定服务在其他应用如果Bound服务属于不同的应用程序,则对它的调用将在几个Binder线程中的一个上运行。您不需要管理这些线程,它们由框架提供。但是,它们可能会乱序执行您的调用。

最新更新