被启动类型的服务必须管理它自己的生命周期。也就是说除非系统要回收系统内存,否则系统不会终止或销毁这个服务,在onStartCommand()方法返回后,这个服务会继续运行。因此而这种类型的服务必须通过调用stopSelf()方法或另一个组件通过调用stopService()方法才能终止。
一旦用stopSelf()方法或stopService()方法请求终止服务,那么系统一有可能就会销毁这个服务。
但是,如果你的服务同时处理多个对onStartCommand()方法的请求,那么在你完成请求启动过程时,不应该终止这个服务,因为你的服务可能正在接受一个新的启动请求(在第一个请求结束时终止服务有可能会终止第二个请求)。要避免这个问题,你能够使用stopSelf(int)方法来确保你请求终止的服务始终是基于最近启动的请求。也就是说,调用stopSelf(int)方法时,你要把那个要终止的服务ID传递给这个方法(这个ID是发送给onStartCommand()方法的)。这样如果服务在你调用stopSelf(int)方法之前收到了一个新的启动请求,那么这个ID就会因不匹配而不被终止。
警告:重要的是你的应用程序要在工作结束时终止它们的服务,从而避免浪费系统资源和电池电量。如果需要,其他的组件能够调用stopService()方法终止服务。即使对于能够绑定的服务,如果这个服务接收了对onStartCommand()方法的调用,你也必须自己来终止这个服务。
关于服务的生命周期的更多信息,请看“管理服务的生命周期”
注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。
如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar