Service vs IntentService的区别
2018-03-19 本文已影响34人
寒冬_腊月
什么时候使用
- Service可以用于没有UI的任务,但不应该太长。如果您需要执行长时间任务,则必须在Service中使用线程
- IntentService可用于长时间的任务,通常不会与主线程通信。如果需要通信,可以使用主线程处理程序或广播意图。另一种使用情况是需要回调(意图触发任务)。
怎样触发
- Service由调用方法startService()触发
- IntentService是使用Intent触发的,它产生了一个新的工作线程,并且在这个线程上调用了onHandleIntent()方法
从哪里触发
- Service和IntentService可以从任何线程,活动或其他应用程序组件中触发
运行在哪里
- Service在后台运行,但它在应用程序的主线程上运行
- IntentService在单独的工作线程上运行
限制/缺点
- Service可能会阻止应用程序的主线程
- IntentService不能并行运行任务。因此,所有连续的Intent都将进入工作线程的消息队列并将按顺序执行
怎样停止
- 如果你实现了一个Service,你有责任通过调用stopSelf()或stopService()来完成它的工作。 (如果你只想提供绑定,你不需要实现这个方法)
- IntentService在处理完所有启动请求后停止服务,因此您不必调用stopSelf()