服务vs IntentService

有人可以向我展示一个可以用IntentService完成的事情的例子,而这个IntentService不能用一个Service来完成(反之亦然)?

我也相信一个IntentService运行在另一个线程中,一个Service不运行。 所以,就我所知,在自己的线程中启动一个服务就像启动一个IntentService 。 不是吗?

如果有人能帮我解决我的两个问题,我将不胜感激。


Tejas Lagvankar就这个问题写了一篇不错的文章。 以下是Service和IntentService之间的一些主要差异。

何时使用?

  • 该服务可以用于没有UI的任务,但不应该太长。 如果您需要执行长时间的任务,则必须在Service中使用线程。

  • IntentService可用于长时间的任务,通常不会与主线程通信。 如果需要通信,可以使用主线程处理程序或广播意图。 另一种使用情况是需要回调(意图触发任务)。

  • 如何触发?

  • 该服务由调用方法startService()触发。

  • IntentService是使用Intent触发的,它产生一个新的工作线程,并且在这个线程上调用onHandleIntent()方法。

  • 触发

  • Service和IntentService可以从任何线程,活动或其他应用程序组件中触发。
  • 运行

  • 该服务在后台运行,但它在应用程序的主线程上运行。

  • IntentService在单独的工作线程上运行。

  • 限制/缺点

  • 该服务可能会阻止应用程序的主线程。

  • IntentService不能并行运行任务。 因此,所有连续的意图都将进入工作线程的消息队列并将按顺序执行。

  • 何时停止?

  • 如果你实现了一个服务,你有责任通过调用stopSelf()stopService()来完成它的工作。 (如果你只想提供绑定,你不需要实现这个方法)。

  • IntentService在处理完所有启动请求后停止服务,因此您不必调用stopSelf()


  • 如果有人能够向我展示一个你可以用intentService完成的事情的例子,并且不能用Service来完成,反之亦然。

    根据定义,这是不可能的。 IntentServiceService一个子类,用Java代码编写。 因此,任何一个IntentService确实,一个Service可以做,通过包括代码的相关位IntentService使用。

    用自己的线程启动服务就像启动IntentService一样。 不是吗?

    IntentService的三个主要功能是:

  • 后台线程

  • 传递给onStartCommand()Intent自动排队,所以如果一个Intent被后台线程上的onHandleIntent()处理,其他命令排队等待轮到他们

  • 一旦队列为空,则通过调用stopSelf()来自动关闭IntentService

  • 任何和所有这些都可以通过Service来实现,而无需扩展IntentService


    服务

  • startService()调用
  • 从任何Thread触发
  • Main Thread上运行
  • 可能会阻止主(UI)线程。 长时间使用服务内的线程
  • 一旦任务完成,我们有责任通过调用stopSelf()stopService()来停止服务。
  • IntentService

  • 它执行长时间的任务,如果需要通信则通常不与主线程通信,然后由HandlerBroadcastReceiver
  • 通过Intent调用
  • Main Thread触发
  • 在单独的线程上运行
  • 无法并行运行任务,并且多个意图在同一工作线程上排队。
  • 链接地址: http://www.djcxy.com/p/62623.html

    上一篇: Service vs IntentService

    下一篇: Registering a ContentObserver in a Android Service