有人可以给我展示一个示例,该示例可以通过IntentService进行但不能通过Service (反之亦然)?
我也相信IntentService在不同的线程中运行,而Service不在。因此,据我所知,在其自己的线程中启动服务就像启动IntentService 。不是吗
如果有人可以帮助我解决我的两个问题,我将不胜感激。
Tejas Lagvankar 就此主题写了一篇不错的文章 。以下是 Service 和 IntentService 之间的一些关键区别。
什么时候使用?
该Service可以用于没有 UI 的任务中,但不应太长。如果需要执行长任务,则必须使用 Service 中的线程。
IntentService可以用于长时间任务,通常无需与主线程通信。如果需要通信,则可以使用主线程处理程序或广播意图。另一个使用情况是需要回调(意图触发的任务)时。
如何触发?
通过调用方法startService()触发服务 。
IntentService是使用 Intent 触发的,它产生一个新的工作线程,并在该线程上调用onHandleIntent()方法。
触发自
运行
该服务在后台运行,但是在应用程序的主线程上运行。
IntentService在单独的工作线程上运行。
局限性 / 缺点
服务可能会阻止应用程序的主线程。
IntentService无法并行运行任务。因此,所有连续的意图都将进入工作线程的消息队列,并将按顺序执行。
什么时候停止?
如果实现服务 ,则有责任通过调用stopSelf()或stopService()在服务完成时停止该服务。 (如果只想提供绑定,则不需要实现此方法)。
在处理完所有启动请求之后, IntentService 将停止服务,因此您不必调用stopSelf() 。
如果有人可以向我展示一个示例,该示例可以通过
IntentService完成,而不能通过Service完成,IntentService。
根据定义,这是不可能的。 IntentService是用 Java 编写的Service的子类。因此,任何一个IntentService确实,一个Service可以做,通过包括代码的相关位IntentService用途。
用自己的线程启动服务就像启动 IntentService。不是吗
IntentService的三个主要功能是:
后台线程
传递给onStartCommand()的Intent的自动排队,因此,如果一个Intent正在由onHandleIntent()在后台线程上处理,则其他命令排队等候
一旦队列为空,则通过调用stopSelf()自动关闭IntentService
所有这些都可以由Service实现,而无需扩展IntentService 。
服务
startService()调用Thread触发Main Thread上运行stopSelf()或stopService()来停止服务意图服务
Handler或BroadcastReceiver Intent调用Main Thread触发