IntentService 和 Service 有啥区别? [复制]
Posted
技术标签:
【中文标题】IntentService 和 Service 有啥区别? [复制]【英文标题】:What is the difference between an IntentService and a Service? [duplicate]IntentService 和 Service 有什么区别? [复制] 【发布时间】:2011-12-07 22:49:15 【问题描述】:您能帮我理解IntentService
和Service
之间的区别吗?
【问题讨论】:
techtej.blogspot.com.es/2011/03/… 这里真的很好比较:***.com/questions/15524280/service-vs-intent-service 请转到上面的链接,他们真的太好了.. 非常感谢他们... 旧问题如何与新问题重复? 【参考方案1】:简而言之,Service 是开发人员设置后台操作的更广泛的实现,而 IntentService 对于“即发即弃”操作很有用,负责后台线程的创建和清理。
来自文档:
服务 Service 是一个应用程序组件,它代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或提供功能供其他应用程序使用。
IntentService
Service 是 IntentService 按需处理异步请求的服务(表示为 Intent)的基类。客户端通过startService(Intent)
调用发送请求;服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。
请参阅此文档 - http://developer.android.com/reference/android/app/IntentService.html
【讨论】:
IntentService 不是服务的基类。反之亦然。检查 - developer.android.com/reference/android/app/IntentService.html @Darpan 它是“处理异步请求的服务”的基类,而不仅仅是“服务”。所以上面那句话是正确的。 大家好,我可以在服务中编写 IntentService 吗?如果是,任何人都可以提供一个示例/代码 sn-p。谢谢 @Phix 我正在制作一个应用程序,我需要在其中每半小时扫描一次本地数据库,这将是更好的 IntentService 或 Service ??【参考方案2】:Service
是服务实现的基类。 Service
在应用程序的主线程上运行,这可能会降低应用程序的性能。因此,IntentService
是 Service 的直接子类,可以让事情变得更简单。
IntentService
用于在后台执行某项任务。完成后,IntentService
的实例会自动终止。它的使用示例是从 Internet 下载某个资源。
区别
Service
类使用应用程序的主线程,而IntentService
创建一个工作线程并使用该线程运行服务。
IntentService
创建一个队列,一次将一个意图传递给 onHandleIntent()
。因此,应该通过直接扩展Service
类来实现多线程。
Service
类需要使用 stopSelf()
手动停止。同时,IntentService
在执行完毕后会自动停止。
IntentService
实现了返回 null
的 onBind()
。也就是说IntentService
默认是不能绑定的。
IntentService
实现 onStartCommand()
将 Intent 发送到队列和 onHandleIntent()
。
简而言之,使用IntentService
只需要做两件事。首先,实现构造函数。其次,实现onHandleIntent()
。对于其他回调方法,需要调用super才能正确跟踪。
【讨论】:
很好的解释。我正在制作音乐应用程序。那么,哪一个适合呢?服务还是 IntentService? 对于音乐应用程序,我认为您必须使用服务,因为默认情况下,IntentService 是不可绑定的,而且我认为您必须将音乐应用程序与音乐服务绑定才能启动、停止。如前所述,IntentService 更适合“一劳永逸” @Premier IntentService 不会类似于 Service.START_NOT_STICKY 吗?根据您的示例,这也是“开始并忘记”。 我有一个应用程序可以在一段时间后通过服务同步数据,那么我应该使用服务还是意图服务? @M.Raheel 同步数据会导致长时间运行,所以我认为你应该使用IntentService
来工作【参考方案3】:
服务:它在您系统的后台运行。例如,
-
如果您去酒店后将汤点菜交给服务员
服务器收到您的订单并将其发送给厨师
你不知道厨房里的汤是怎么做的,做汤需要什么流程
您的订单准备好后,服务员会为您端上汤。
后台流程:厨师熬汤
IntentService:- 它是连续服务..(即)当您一次订购许多食品到服务器时,服务器会一件一件地交付这些食品,而不是一次全部交付。
【讨论】:
我喜欢你的解释方式。 对不起,但它缺少两者之间的重要区别.. “连续服务”是什么意思? 这个解释不正确。service
不在后台运行,而是在前台运行。
解释令人印象深刻。【参考方案4】:
有关此主题,请参阅 Tejas Lagvankar 的 post。 以下是 Service 和 IntentService 以及其他组件之间的一些主要区别。
【讨论】:
漂亮的表格信息【参考方案5】:服务
没有 UI 的任务,但不应用于长任务。在服务中使用线程来处理长任务 由onStartService()
调用
从任何线程触发
在主线程上运行
可能会阻止main(UI
) 线程
IntentService
长任务通常不与主线程通信,如果需要通信则由 Handler 或广播完成 通过 Intent 调用 从主线程触发(在主线程上接收到意图并产生工作线程) 在单独的线程上运行 我们无法并行运行任务,并且多个意图在同一个工作线程上排队。【讨论】:
【参考方案6】:Service
实际上在您的应用程序的同一线程中运行;扩展 Service 时,必须手动生成新线程来运行 CPU 阻塞操作。
对
IntentService
是Service
的子类,它产生一个线程来从那里执行后台工作(无需创建新线程来执行 CPU 阻塞操作)。
【讨论】:
不是为了防止CPU阻塞操作,而不是运行它们吗?我不确定 是的,服务需要一个新线程来运行 CPU 阻塞操作【参考方案7】:Service
:在主线程中工作,因此它会在几秒钟后导致 ANR(Android 无响应)。
IntentService
: Service
与另一个后台线程单独工作,不与主线程交互。
【讨论】:
服务:在主线程中工作,因此它会在几秒钟后导致 ANR(Android 无响应)。 - 我可以让服务运行数小时和数小时我从未见过 ANR,所以我怀疑这是真的。【参考方案8】:Intent 服务是 Service 的子项
IntentService:如果您想在打开应用程序开始时下载一堆图像。这是一个一次性的过程,下载完所有内容后即可自行清理。
服务:一种服务,将不断用于通过 Web API 调用在您的应用和后端之间进行通信。即使它完成了当前的任务,您仍然希望它在几分钟后完成,以便进行更多交流
【讨论】:
以上是关于IntentService 和 Service 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Android中Service与IntentService的使用比较
我应该使用 IntentService 还是 Service 进行 UI 更新?