意向服务和服务的区别是什么?

你能帮我理解 IntentServiceService的区别吗?

118651 次浏览

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

来自文件:

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

意向服务 服务是随需应变的意图服务 处理异步请求的服务(表示为意图)的基类。客户机通过 startService(Intent)调用发送请求; 服务根据需要启动,依次使用工作线程处理每个意图,并在工作用完时停止自身。

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

Service: 它在系统的后台运行。例如,

  1. 如果你去了一家旅馆,你把你点的汤送到服务员那里
  2. 服务器收到您的订单并发送给主厨
  3. 你不知道在厨房里汤是怎么做的,也不知道做汤需要什么过程
  4. 一旦您的订单准备好了,服务员会给您端来汤。

背景制作过程: 厨师煲汤

意向服务:-这是连续服务。.(例如,你同时向服务员订购多种食物,但服务员会一个接一个地送货上门,而不会同时送货上门。)。

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

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

Service是服务实现的基类。Service运行在应用程序的主线程上,这可能会降低应用程序的性能。因此,可以使用服务的直接子类 IntentService来简化工作。

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

差异

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

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

Service: 在主线程中工作,所以它会在几秒钟后导致 ANR(Android 没有响应)。

IntentService: Service与另一个后台线程分开工作,在不与主线程交互的情况下执行某些操作。

意向服务是服务的产物

意向服务: 如果你想在打开应用程序的时候下载一大堆图片。这是一个一次性的过程,一旦所有东西都下载完毕,就可以自动清理。

服务: 一个服务,将不断被用来通信之间的应用程序和后端的 Web API 调用。即使它已经完成了当前的任务,您仍然希望它在几分钟之后出现,以便进行更多的交流

服务

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

意向服务

  • 长任务通常不与主线程通信,如果通信是必要的,然后由处理程序或广播完成
  • 通过意图调用
  • 从主线程(Intent is received on main Thread and worker thread is spawned)触发
  • 在单独的线程上运行
  • 我们不能并行运行任务,而且多个意图在同一个工作线程上排队。

关于这个话题,请看 Tejas Lagvankar 的 邮寄。 下面是服务和意图服务以及其他组件之间的一些关键区别。

enter image description here