IntentService和服务之间有什么区别?

你能帮我理解一下IntentServiceService之间的IntentService吗?

简而言之,Service是开发人员设置后台操作的更广泛的实现,而IntentService对于“火灾和遗忘”操作有用,负责后台线程的创build和清理。

从文档:

服务服务是一种应用程序组件,代表应用程序希望在不与用户交互的情况下执行长时间运行的操作,或者提供其他应用程序使用的function。

IntentService Service是IntentService Services的基类,用于按需处理asynchronous请求 (表示为Intents)。 客户通过startService(Intent)调用发送请求; 该服务根据需要启动,使用工作线程处理每个Intent,并在工作不正常时自行停止。

参考这个文档 – http://developer.android.com/reference/android/app/IntentService.html

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

IntentService用于在后台执行某个任务。 一旦完成, IntentService的实例将自动终止。 其使用的例子是从互联网上下载某个资源。

差异

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

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

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

  1. 如果你去了一家旅馆,而且你把一份汤给你的服务器
  2. 服务器得到您的订单,并发送给厨师
  3. 你不知道如何在厨房做汤,做什么过程是必需的汤
  4. 一旦你的订单准备好了,服务器就会给你带来汤。

后台程序:厨师制作汤

IntentService: – 它是连续的服务。(即)当你一次给服务器订购很多食品时,服务器一个接一个地递送这些食品,而不是一次交付。

请参阅Tejas Lagvankar关于这个主题的文章 。 以下是Service和IntentService及其他组件之间的一些主要差异。

在这里输入图像描述

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

VS

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

服务

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

IntentService

  • 长时间的任务通常不需要与主线程通信,如果需要通信则由Handler或广播完成
  • 通过意向调用
  • 由主线程触发( Intent在主线程上被接收,工作线程被产生
  • 在单独的线程上运行
  • 我们不能并行运行任务,并且多个意图在同一个工作线程上排队。

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

IntentServiceService与另一个后台线程分开工作,做一些事情,而不与主线程交互。

差异

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

服务

这是所有服务的基类。 扩展这个类时,重要的是创build一个新的线程来完成所有服务的工作,因为默认情况下,服务使用应用程序的主线程,这可能会降低应用程序运行的任何活动的性能。

IntentService

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

差异

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

意向服务是Service的子项

IntentService:如果你想在打开你的应用程序的开始下载一堆图像。 这是一个一次性的过程,一旦下载完成,就可以自行清理。

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