onStartCommand和带有意图的绑定服务之间的区别

3
如果我与服务的交互方式是单向的(即只调用服务执行某些操作而不请求结果),那么这两种方法有什么区别:
1. startService(intent)onStartCommand根据intent.getAction执行任务。 2. 将服务绑定并使用Messenger向服务发送消息,以便服务根据消息执行任务。
我想到了一个区别(但不确定):对于第一种方法,每次调用startService都需要创建服务,因此超载是我们需要每次创建服务,除非使用START_STICKY
1个回答

2

有几个区别,但最重要的是线程管理。

IntentService 如果使用Intent服务,则会在单个守护线程中调用onHandleIntent。每次对startService的新调用将显示为对onHandleIntent的按顺序排列的队列调用。结果是在该守护进程线程上简单、良好行为和有序执行调用。顺便说一下,直到队列为空,服务才会停止自身:无需“重新创建”

同一应用程序中的绑定服务 实际上,有两种情况适用于绑定服务。如果它在您的进程中运行,则服务将在UI线程上运行。如果您需要在UI线程之外运行,将需要构建自己的线程(可能是Looper),因此使用Messenger与之通信。结果更加灵活(线程数、排队顺序等由您决定),但与IntentService非常相似。

另一个应用程序中的绑定服务 如果绑定服务属于不同的应用程序,则您对其进行的调用将在多个Binder线程中运行。您不需要管理这些线程,它们由框架提供。但是,它们可以无序地执行您的调用。


所有服务都有一个onStartCommand方法。您可以在任何一种情况下处理服务onStartCommand中的intent.getAction。这并不是一个独特的特征。 - G. Blake Meike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接