我正在寻找一个可以用 IntentService
完成而不能用 Service
完成的示例(反之亦然)?
我也相信 IntentService
在不同的线程中运行,而 Service
不会。所以,据我所知,在它自己的线程中启动一个服务就像启动一个IntentService
。对吗?
最佳答案
Tejas Lagvankar 写了一篇不错的 post关于这个话题。 以下是 Service 和 IntentService 之间的一些主要区别。
何时使用?
Service 可以在没有 UI 的任务中使用,但不能太长。如果需要执行较长的任务,则必须在 Service 中使用线程。
IntentService 可用于通常不与主线程通信的长任务。如果需要通信,可以使用主线程处理程序或广播 Intent 。另一种使用情况是需要回调时( Intent 触发的任务)。
如何触发?
Service是通过调用
startService()
方法触发的。IntentService 使用 Intent 触发,它产生一个新的工作线程,并在该线程上调用方法
onHandleIntent()
。
触发自
- Service 和 IntentService 可以从任何线程、 Activity 或其他应用程序组件触发。
运行时
Service 在后台运行,但在应用程序的主线程上运行。
IntentService 在单独的工作线程上运行。
限制/缺点
Service 可能会阻塞应用程序的主线程。
IntentService 不能并行运行任务。因此,所有连续的 Intent 都将进入工作线程的消息队列并按顺序执行。
什么时候停止?
如果你实现了一个Service,你有责任通过调用
stopSelf()
或stopService在服务完成时停止它()
。 (如果只想提供绑定(bind),则不需要实现该方法)。IntentService 在处理完所有启动请求后停止服务,因此您无需调用
stopSelf()
。
关于android - Android平台中的Service vs IntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524280/