【发布时间】:2011-12-07 22:49:15
【问题描述】:
您能帮我理解IntentService 和Service 之间的区别吗?
【问题讨论】:
-
请转到上面的链接,他们真的太好了.. 非常感谢他们...
-
旧问题如何与新问题重复?
标签: android android-service android-intentservice
您能帮我理解IntentService 和Service 之间的区别吗?
【问题讨论】:
标签: android android-service android-intentservice
简而言之,Service 是开发人员设置后台操作的更广泛的实现,而 IntentService 对于“即发即弃”操作很有用,负责后台线程的创建和清理。
来自文档:
服务 Service 是一个应用程序组件,它代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或提供功能供其他应用程序使用。
IntentService
Service 是 IntentService 按需处理异步请求的服务(表示为 Intent)的基类。客户端通过startService(Intent)调用发送请求;服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。
请参阅此文档 - http://developer.android.com/reference/android/app/IntentService.html
【讨论】:
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:- 它是连续服务..(即)当您一次订购许多食品到服务器时,服务器会一件一件地交付这些食品,而不是一次全部交付。
【讨论】:
service 不在后台运行,而是在前台运行。
有关此主题,请参阅 Tejas Lagvankar 的 post。 以下是 Service 和 IntentService 以及其他组件之间的一些主要区别。
【讨论】:
服务
onStartService() 调用
main(UI) 线程IntentService
【讨论】:
Service 实际上在您的应用程序的同一线程中运行;扩展 Service 时,必须手动生成新线程来运行 CPU 阻塞操作。
对
IntentService 是Service 的子类,它产生一个线程来从那里执行后台工作(无需创建新线程来执行 CPU 阻塞操作)。
【讨论】:
Service:在主线程中工作,因此它会在几秒钟后导致 ANR(Android 无响应)。
IntentService: Service 与另一个后台线程单独工作,不与主线程交互。
【讨论】:
Intent 服务是 Service 的子项
IntentService:如果您想在打开应用程序开始时下载一堆图像。这是一个一次性的过程,下载完所有内容后即可自行清理。
服务:一种服务,将不断用于通过 Web API 调用在您的应用和后端之间进行通信。即使它完成了当前的任务,您仍然希望它在几分钟后完成,以便进行更多交流
【讨论】: