Service:
1功能:是不需要与用户直接交互的后台活动。即使应用程序没有处于前台,service依然可以运行。
2启动方式:
2.1:Context.startService(Param);这种请求启动方式是启动一个独立的Service,能够在手机服务中看到。它依附于启动它的应用程序的主线程中,它不会依附于某个 具体的Context,它不会另起线程。
这种方式请求启动的Service在系统创建它的实例后会依次执行Service的生命周期函数onCreate()、onStartCommand()。在Service存在实例后再Context.startService()
只会执行Service的onStartCommand()。onCreate()只会在第一次创建Service实例的时候执行。当Context.stopService(Param)或Service实例自身调用stopself(),则会
调用Service的onDestory()函数并销毁Service。
2.2:Context.bindService(Param),这种请求启动方式是将Context绑定一个Service,这种绑定的服务在手机服务中无法直接看到。它依附于绑定它的Context,也不会 另起线程。这种方式请求启动的Service在启动后依次会执行onCreate()、onBind()。在Service的onBind()调用后,会回调一个在绑定时传入的ServiceConnetion子对像 的onServiceConnection()方法,该方法会传入onBind()的返回参数,这个参数类型是IBinder,Context实例通过这个返回的IBinder对象就可以操作Service通过这个接口 提供的服务了,也就有了绑定的意思。当同一个Context再调用Context.bindService(Param),不会再调用onCreate(),只会调用Service的onBind()以及绑定后续函数。
Context.unBind()调用后会调用Service的onUnbind()。当多个context都Context.bindService()到同一个Service时,这个时候会调用Service的onRebind()。
注意事项:1.Service都是单例的
2.当一个Service只与一个Activity绑定的时候,当Activity销毁或调用context.unbind()的时候,也会依次调用Service的onUnbind()、onDestory(),然后销毁
Service。若一个Service绑定 多个Activity的时候,在Activity销毁的时候只会执行Service的onUnbind()而不会销毁Service,直到最后一个绑定的Activity销毁。
3.若服务及被启动又被绑定,则若想销毁Service,这必须既要调用Context.stop()也要调用调用Context.unbind()才能销毁掉Service.