IntentService和服务有什么区别?

时间:2011-10-14 17:28:41

标签: android android-service android-intentservice

您能帮我理解IntentServiceService之间的区别吗?

8 个答案:

答案 0 :(得分:114)

简而言之,服务是开发人员设置后台操作的更广泛的实现,而IntentService对于“即发即弃”操作非常有用,负责后台线程的创建和清理。

来自文档:

<强>服务 服务是一个应用程序组件,表示应用程序希望在不与用户交互的情况下执行较长时间运行的操作,或者为其他应用程序提供要使用的功能。

<强> IntentService Service是IntentService 服务的基类,可根据需要处理异步请求 (表示为Intents)。客户端通过startService(Intent)电话发送请求;服务根据需要启动,使用工作线程依次处理每个Intent,并在工作失败时自行停止。

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

答案 1 :(得分:105)

Service是服务实现的基类。 Service在应用程序的主线程上运行,这可能会降低应用程序性能。因此,IntentService是服务的直接子类,可以使事情变得更容易。

IntentService用于在后台执行某项任务。完成后,IntentService的实例会自动终止。其用法示例是从Internet下载某种资源。

<强>差异

  1. Service类使用应用程序的主线程,而IntentService创建工作线程并使用该线程来运行服务。
  2. IntentService创建一个队列,一次将一个意图传递给onHandleIntent()。因此,应该通过直接扩展Service类来实现多线程。 Service类需要使用stopSelf()手动停止。同时,IntentService在完成执行时自动停止。
  3. IntentService实现onBind(),返回null。这意味着默认情况下不能绑定IntentService
  4. IntentService实现了onStartCommand(),它将Intent发送到队列并发送到onHandleIntent()
  5. 简而言之,使用IntentService只需要做两件事。首先,实现构造函数。其次,要实施onHandleIntent()。对于其他回调方法,需要调用super以便可以正确跟踪它。

答案 2 :(得分:65)

服务:它在您系统的后台运行。例如,

  1. 如果你去了一家酒店而且你已经向服务器点了汤的订单
  2. 服务器获取您的订单并发送给主厨
  3. 你不知道如何在厨房里制作汤以及制作汤需要什么过程
  4. 一旦您的订单准备就绪,服务器就会为您带来汤。
  5. 后台流程:厨师制作汤

    IntentService: - 它是连续的服务..(即)当您一次向服务器订购许多食品时,服务器逐个递送这些商品而不是一次性递送所有商品。

答案 3 :(得分:42)

请参阅Tejas Lagvankar关于此主题的post。 以下是Service和IntentService以及其他组件之间的一些主要区别。

enter image description here

答案 4 :(得分:12)

Service实际上在您应用的同一个主题中运行;扩展Service时,必须手动生成新线程以运行CPU阻塞操作。

VS

IntentServiceService的子类,它从那里生成一个线程来执行后台工作(不需要创建新线程来执行CPU阻塞操作)。

答案 5 :(得分:11)

<强>服务

  • 没有UI的任务,但不应该用于长任务。在长期任务中使用服务中的线程
  • onStartService()
  • 调用
  • 从任何线程触发
  • 在主线程上运行
  • 可能阻止main(UI)主题

<强> IntentService

  • 如果需要通信,那么长任务通常不与主线程通信,然后由Handler或广播
  • 完成
  • 通过Intent调用
  • 从主线程触发(主线程上收到 Intent,产生工作线程
  • 在单独的线程上运行
  • 我们无法并行运行任务,并且多个意图在同一个工作线程上排队。

答案 6 :(得分:5)

Service:在主线程中工作,这样几秒钟后就会导致 ANR (Android Not Responding)。

IntentServiceService与另一个后台线程分开工作,无需与主线程交互。

答案 7 :(得分:1)

意图服务是服务的孩子

IntentService:如果您想在打开应用程序时下载一堆图像。这是一次性过程,一旦下载完所有内容就可以自我清理。

服务:一种服务,它将不断用于通过Web API调用在您的应用和后端之间进行通信。即使它已完成当前任务,您仍然希望它在几分钟之后,以进行更多沟通