Android平台中的Service和IntentService之间的区别

24 浏览
0 Comments

Android平台中的Service和IntentService之间的区别

我正在寻找一个使用IntentService可以完成但使用Service无法完成的示例(反之亦然)?

我也认为IntentService在不同的线程中运行,而Service则不会。因此,在其自己的线程中启动服务就像启动IntentService。这个说法正确吗?

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果有人可以向我展示一个仅可使用IntentService完成的功能,而Service不能完成该功能,或者方式恰好相反。

根据定义,这是不可能的。 IntentService是Java中Service的子类。因此,任何IntentService可以完成的功能,Service也可以通过包含IntentService使用的相关代码实现。

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

一个IntentService的三个主要特点是:

  • 后台线程

  • 将传递到 onStartCommand()Intent自动排队,因此,如果一个Intent正在后台线程上通过onHandleIntent()处理,其他命令会排队等待它们的机会。

  • 队列为空后,通过调用stopSelf()自动关闭IntentService

任何一个Service都可以在不扩展IntentService的情况下实现上述任何一个或全部特点。

0
0 Comments

Tejas Lagvankar写了一篇关于这个主题的不错的文章。post下面是服务和IntentService之间的一些关键区别。

何时使用?

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

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

如何触发?

  • 通过调用方法startService()触发服务。

  • 使用意图触发IntentService,它会生成一个新的工作线程,并在该线程上调用onHandleIntent()方法。

触发自

  • 服务和IntentService可以从任何线程、活动或其他应用程序组件触发。

运行在

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

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

限制/缺陷

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

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

何时停止?

  • 如果你实现了一个Service,那么当它完成所有工作后,你应该通过调用stopSelf()stopService()来停止该服务。(如果你只想提供绑定,不必实现此方法。)

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

0