如果我与服务交互的方式是单向的(那只是调用服务来做某事而不要求结果)。这两种方法之间的差异是什么:
startService(intent)
和onStartCommand
执行任务取决于intent.getAction
Messenger
绑定服务并向服务发送消息。因此,该服务根据消息执行任务。这是我能想到的一个区别(我不确定):
对于方法1,我们需要在每次调用startService
时创建服务,因此重载是我们每次都需要创建服务,除非使用START_STICKY
。
答案 0 :(得分:2)
存在一些差异,但最重要的是线程管理。
<强> IntentService 强> 如果使用Intent服务,则在单个守护程序线程中调用onHandleIntent。每次对startService的新调用都将显示为对onHandleIntent的有序排队调用。结果是在该守护程序线程上执行简单,行为良好,按顺序执行调用。顺便说一句,在队列为空之前,服务不会停止:不需要“重新创建”
同一个应用中的绑定服务 实际上,绑定服务有两种情况。如果它在您的进程中运行,则该服务将在UI线程上运行。如果您需要运行 off UI线程的东西,您将必须构建自己的线程(可能是一个Looper),因此,使用Messenger与它交谈。结果更灵活(线程数,排队顺序等取决于您),但与IntentService非常相似。
另一个应用中的绑定服务 如果Bound服务属于另一个应用程序,则对它的调用将在几个Binder线程之一上运行。您不需要管理这些线程,它们由框架提供。但是,他们可以不按顺序执行您的呼叫。