onStartCommand()
当一个组件通过调用startService()方法请求启动一个服务时,系统会调用这个服务的onStartCommand()方法。一旦这个方法执行了,那么这个服务就被启动,并且在后台无限期的运行。如果你实现了这个方法,当服务的工作结束时,你有责任通过调用stopSelf()方法或stopService()方法来终止服务。(如果你只想让服务提供绑定的能力,你不需要实现这个方法。)
onBind()
当一个组件想通过调用bindService()方法跟这个服务(如执行RPC)绑定时,系统会调用这个方法。在这个方法的实现中,你必须通过返回一个IBinder对象给客户提供一个用户跟服务进行交互的接口。你必须实现这个方法,但是如果你不允许绑定,那么这个方法应该返回null。
onCreate()
当服务被第一次创建时,系统会调用这个方法来执行一次安装过程(它在onStartCommand()或onBind()方法之前调用)。如果服务正在运行,这个方法就不会被调用。
onDestroy()
当服务不再使用或正在销毁时,系统会调用这个方法。你的服务应该使用这个方法来实现一些清理资源的工作,如清理线程、被注册的监听器、接受器等。这是服务能够接受的最后的调用。
如果组件通过调用startService()方法启动服务,那么这个服务就会一直运行到它自己用stopSelf()方法终止服务,或另一个组件通过调用stopService()方法来终止它。
如果一个组件调用bindService()方法来创建这个服务(并且不调用onStartCommand()方法),那么这个服务只跟绑定的组件运行同样长的时间。一旦这个从所有的客户端解绑,系统就会销毁它。
Android系统只有在内存不足和必须给有用户焦点的Activity回收系统资源时,才会强制终止一个服务。如果服务是被一个有用户焦点的Activity绑定的,那么它不可能被杀死,并且如果这个服务被声明运行在前台(稍后讨论),那么它也几乎不能被杀死。否则如果这个服务被启动并且长时间运行,那么随着时间的推移系统会降低它在后台任务列表中位置,并且这个服务将很容易被杀死---如果你的服务被启动了,那么你必须把它设计成能够通过系统能够妥善的重启。如果系统杀死了你的服务,那么一旦资源变为有效它就会重启(虽然这也依赖从onStartCommand()方法返回的值,稍后讨论)。