你能帮我理解anIntentService
和a之间的区别Service
吗?
8 回答
Service
是服务实现的基类。Service
在应用程序的主线程上运行,这可能会降低应用程序的性能。因此,IntentService
作为 Service 的直接子类,可以使事情变得更容易。
用于在IntentService
后台执行特定任务。完成后,实例IntentService
会自动终止。它的使用示例是从 Internet 下载某个资源。
差异
Service
类使用应用程序的主线程,同时IntentService
创建一个工作线程并使用该线程运行服务。IntentService
创建一个队列,一次将一个意图传递给onHandleIntent()
. 因此,实现多线程应该通过Service
直接扩展类来实现。Service
类需要手动停止使用stopSelf()
. 同时,IntentService
在执行完毕后自动停止。IntentService
实现onBind()
返回null
. 这意味着IntentService
默认情况下不能绑定。IntentService
onStartCommand()
将 Intent 发送到 queue 和 to 的实现onHandleIntent()
。
简而言之,使用IntentService
. 首先,实现构造函数。其次,要实施onHandleIntent()
。对于其他回调方法,需要调用super才能正确跟踪。
简而言之,Service 是开发人员设置后台操作的更广泛的实现,而 IntentService 对于“即发即弃”操作很有用,负责后台线程的创建和清理。
从文档:
服务 服务是一个应用程序组件,代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或提供功能供其他应用程序使用。
IntentService
Service 是 IntentService 服务的基类,可按需处理异步请求(表示为 Intent)。客户端通过调用发送请求startService(Intent)
;该服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。
请参阅此文档 - http://developer.android.com/reference/android/app/IntentService.html
服务:它在您系统的后台运行。例如,
- 如果你去了一家旅馆,你点了一份汤给服务员
- 服务器收到您的订单并发送给厨师
- 你不知道厨房里的汤是怎么做的,做汤需要什么流程
- 一旦你的订单准备好了,服务员就会给你端上汤。
背景流程:厨师做汤
IntentService:- 这是连续服务..(即)当您一次订购许多食品到服务器但服务器将这些食品一件接一件地交付而不是一次交付所有食品时。
请参阅 Tejas Lagvankar关于此主题的帖子。以下是 Service 和 IntentService 以及其他组件之间的一些主要区别。
服务
- 没有 UI 的任务,但不应该用于长任务。使用服务内的线程执行长任务
- 调用者
onStartService()
- 从任何线程触发
- 在主线程上运行
- 可能会阻塞
main(UI
)线程
意向服务
- 长任务通常不与主线程通信,如果需要通信,则由 Handler 或广播完成
- 通过 Intent 调用
- 从主线程触发(在主线程上接收到意图并产生工作线程)
- 在单独的线程上运行
- 我们不能并行运行任务,并且多个意图在同一个工作线程上排队。
Service
实际上在您的应用程序的同一线程中运行;当您扩展服务时,您必须手动生成新线程来运行 CPU 阻塞操作。
对比
IntentService
是一个子类,Service
它产生一个线程来从那里做后台工作(不需要创建一个新线程来做 CPU 阻塞操作)。
Service
:在主线程中工作,因此它会在几秒钟后导致ANR (Android 无响应)。
IntentService
:Service
与另一个后台线程单独工作以做某事而不与主线程交互。
意图服务是服务的孩子
IntentService:如果您想在打开应用程序开始时下载一堆图像。这是一个一次性的过程,下载完所有内容后就可以自行清理。
服务:一种服务,将不断用于通过 Web API 调用在您的应用程序和后端之间进行通信。即使它完成了当前任务,您仍然希望它在几分钟后完成,以便进行更多交流