2011-10-14 65 views
119

能否请你帮我了解的IntentServiceService之间的区别?IntentService和服务有什么区别?

+1

http://techtej.blogspot.com.es/2011/03/android-thread-constructspart-4.html –

+5

真的比较不错的位置: http://stackoverflow.com/questions/15524280/service-vs-intent-service – Moemars

+1

请转到上面的链接,他们真的太好了..非常感谢他们...... –

回答

110

总之,一个服务是为开发者设立后台操作在更大范围实施,而一个IntentService是有用的“发射后不管”作战,照顾后台线程的创建和清理。

从文档:

服务 A服务是表示任一应用程序的同时不与用户交互以执行一个较长的运行的操作或用于其他应用程序使用提供的功能的欲望的应用组件。

IntentService 服务是IntentService 服务是处理需求(表示为意图)异步请求的基类。客户通过startService(Intent)呼叫发送请求;该服务根据需要启动,使用工作线程轮流处理每个Intent,并在其停止工作时自行停止。

请参阅本文档 - http://developer.android.com/reference/android/app/IntentService.html

+6

IntentService不是服务的基类。它的反面是真的。检查 - http://developer.android.com/reference/android/app/IntentService.html – Darpan

+5

@Darpan它是“处理异步请求的服务”的基类,而不是简单的“服务”。这就是为什么上面的句子是正确的。 – nucleo

+0

大家好,我可以在Service中编写IntentService吗?如果是的话,任何人都可以提供一个示例/代码片段。谢谢 –

58

服务:它运行在您的系统上的背景。例如,

  1. 如果你去一个酒店,你给你的汤以服务器
  2. 的服务器获取您的订单,发送到厨师
  3. 你不知道的汤怎么是在厨房里,什么工艺制成所需要的做的汤
  4. 一旦您的订单已准备就绪,服务器为您带来的汤。

后台进程:厨师制汤

IntentService: - 它是连续的服务。(即)当你在一个时间服务器订购许多食品项目,但该服务器由一个提供这些项目之一,不一次全部交付。

+7

我喜欢你的解释风格。 –

+2

对不起,但它缺少两者之间的重要区别.. – eRaisedToX

+0

你是什么意思的“连续服务”? –

12

Service运行实际上是在你的应用程序的同一个线程;当你扩展Service时,你必须手动产生新线程来运行CPU阻塞操作。

VS

IntentServiceService子类,可以产生一个线程从那里做后台工作(无需创建一个新的线程做CPU阻塞操作)。

+0

是不是为了防止CPU阻塞操作,而不是运行它们?林不知道虽然 – committedandroider

+0

多数民众赞成那是真的,服务neew一个新的线程运行CPU阻止操作 –

91

Service是一个基类服务实现的。 Service在应用程序的主线程中运行,这可能会降低应用程序的性能。因此,IntentService是Service的一个直接子类,可以让事情变得更简单。

IntentService的用于在后台执行特定任务。一旦完成,IntentService的实例将自动终止。它的用法示例是从互联网下载某个资源。

差异

  1. Service类使用应用程序的主线程,而IntentService创建工作线程,并使用该线程来运行服务。
  2. IntentService创建一个队列,每次传递一个意向到onHandleIntent()。因此,应该通过直接扩展Service类来实现多线程。 Service班级需要使用stopSelf()进行手动停止。同时,IntentService完成执行时自动自动停止。
  3. IntentService implements onBind()返回null。这意味着IntentService不能被默认绑定。
  4. IntentService执行onStartCommand()发送意图排队和onHandleIntent()

简而言之,使用IntentService只有两件事要做。首先,实施构造函数。其次,实施onHandleIntent()。对于其他回调方法,需要调用super才能正确跟踪它。

+0

尼斯的解释。我正在制作音乐应用程序。那么,哪一个很好呢?服务或IntentService? –

+7

音乐应用程序,我认为你必须使用服务,因为默认情况下,IntentService是不可取的,我认为,你必须绑定你的音乐应用程序与音乐服务开始,停止。如前所述,IntentService更适合“开始并忘记” – Premier

+0

@Premier IntentService与Service.START_NOT_STICKY类似吗?根据你的例子,这也是“开始和忘记”。 –

3

差异

  1. 服务类使用应用程序的主线程,而IntentService创建工作线程,并使用该线程来运行服务。
  2. IntentService创建一个队列,每次将一个意图传递给onHandleIntent()。因此,应该通过直接扩展Service类来实现多线程。
  3. 服务类需要使用stopSelf()手动停止。同时,IntentService在队列中没有意图时会自动停止。
  4. IntentService实现了返回null的onBind()。这意味着IntentService不能默认绑定。
  5. IntentService实现了将Intent发送到队列和onHandleIntent()的onStartCommand()。
+1

不服务也实现onStartCommand? –

5

Service:工作在主线程所以它会在几秒钟后引起ANR(安卓无响应)。

IntentServiceService与另一个后台线程单独工作,以执行某些操作而不与主线程交互。

+0

*服务:在主线程中工作,所以它会在几秒钟后导致ANR(Android Not Responding)。* - 我可以有一个服务运行几个小时,我从来没有见过一个ANR,所以我怀疑是真的。 –

1

意图服务IntentService的服务

孩子:如果你想使用您的应用开始下载一堆图像。这是一次性的过程,一旦下载完成,就可以自行清理。

服务:将不断用于在您的应用程序和后端与Web API调用之间进行通信的服务。即使是与目前的任务完成了,你还希望它是围绕着几分钟后,更多的通信

9

服务

  • 任务没有用户界面,但不应该长期任务使用。通过onStartService()
  • 从任何线程触发使用服务内螺纹长期任务
  • 调用
  • 运行在主线程
  • 可能会阻止main(UI)螺纹

IntentService

  • 长期任务通常不会与主要的沟通如果需要的话通信则其由处理程序进行,或者经由意图
  • 从主线程触发广播
  • 调用读取(意图是在主螺纹和工作线程接收到spawed
  • 运行在独立的线程
  • 我们无法并行运行任务,并且多个意图在同一个工作线程上排队。
3

服务

这是为大家服务的基类。扩展此类时,重要的是创建一个新线程来执行所有服务的工作,因为该服务默认使用应用程序的主线程,这可能会降低应用程序运行的任何活动的性能。

IntentService

这是使用工作线程来处理所有的请求开始,一次一个服务的一个子类。如果您不要求您的服务同时处理多个请求,则这是最佳选择。你所需要做的就是实现onHandleIntent(),它接收每个启动请求的意图,这样你就可以完成后台工作。

差异

服务类使用应用程序的主线程,而IntentService创建工作线程,并使用该线程来运行服务。 IntentService创建一个队列,每次将一个意图传递给onHandleIntent()。因此,应该通过直接扩展Service类来实现多线程。 服务类需要使用stopSelf()手动停止。同时,IntentService在队列中没有意图时会自动停止。 IntentService实现了返回null的onBind()。这意味着IntentService不能默认绑定。 IntentService实现了将Intent发送到队列和onHandleIntent()的onStartCommand()。

31

查看Tejas Lagvankar的post关于此主题。 以下是Service和IntentService及其他组件之间的一些主要差异。

enter image description here

+1

很好的表格信息 –

相关问题