IntentService和服务有什么区别?

mic*_*ael 124 android android-service android-intentservice

你能帮我理解一下IntentServicea和a 之间的区别Service吗?

Phi*_*hix 115

简而言之,服务是开发人员设置后台操作的更广泛实现,而IntentService对于"即发即弃"操作非常有用,负责后台线程创建和清理.

来自文档:

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

IntentService Service是IntentService Services的基类,可根据需要处理异步请求(表示为Intents).客户端通过startService(Intent)呼叫发送请求; 根据需要启动服务,使用工作线程依次处理每个Intent,并在工作失败时自行停止.

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

  • IntentService不是服务的基类.反过来是真的.检查 - http://developer.android.com/reference/android/app/IntentService.html (9认同)
  • @Darpan它是"处理异步请求的服务"的基类,而不仅仅是"服务".这就是为什么上面的句子是正确的. (6认同)
  • @Phix我正在制作一个应用程序,我需要每隔半小时扫描一次本地数据库哪个会更好IntentService或Service? (2认同)

Jas*_* PJ 109

Service是服务实现的基类.Service在应用程序的主线程上运行,这可能会降低应用程序性能.因此,IntentService这是服务的直接子类,可以使事情变得更容易.

IntentService用于在后台执行某项任务.完成后,实例IntentService会自动终止.其用法的示例是从因特网下载特定资源.

差异

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

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

  • 对于音乐应用程序,我认为你必须使用服务,因为,默认情况下,IntentService是不可绑定的,我认为,你必须绑定你的音乐应用程序与音乐服务开始,停止.如前所述,IntentService更适合"开始和忘记" (7认同)

小智 64

service:它在您的系统后台运行.例如,

  1. 如果你去了一家酒店,你就可以向服务员点一份汤
  2. 服务器获取您的订单并发送给厨师
  3. 你不知道如何在厨房里制作汤,以及制作汤需要什么样的过程
  4. 一旦您的订单准备就绪,服务器就会为您带来汤.

后台流程:厨师制作汤

IntentService: - 它是连续服务..(即)当您一次向服务器订购许多食品时,服务器逐个递送这些商品而不是一次性递送所有商品.

  • 我喜欢你的解释风格. (8认同)
  • 对不起,但它缺少两者之间的重要区别.. (3认同)
  • 这个解释是不正确的。“服务”不在后台运行,而是在前台运行。 (2认同)

Pra*_*nav 46

请参阅Tejas Lagvankar 关于此主题的帖子.以下是Service和IntentService以及其他组件之间的一些主要区别.

在此输入图像描述


abb*_*efa 14

Service实际上在你的应用程序的同一个线程中运行; 扩展Service时,必须手动生成新线程才能运行CPU阻塞操作.

VS

IntentService是一个子类,Service它从那里产生一个线程来做后台工作(不需要创建一个新线程来进行CPU阻塞操作).


Uma*_*ari 12

服务

  • 没有UI的任务,但不应该用于长任务.在服务中使用Thread进行长任务
  • 调用 onStartService()
  • 从任何线程触发
  • 在主线上运行
  • 可以阻止main(UI)线程

IntentService

  • 如果需要通信,则长任务通常不与主线程通信,然后由处理程序或广播完成
  • 通过Intent调用
  • 从主线程触发(在主线程上收到意图并生成工作线程)
  • 在单独的线程上运行
  • 我们不能并行运行任务,并且多个意图在同一个工作线程上排队.